
-(voID) cleanSDRDfileObjects{ __weak __typeof__(self) weakSelf = self; dispatch_async(dispatch_get_main_queue(),^{ [weakSelf.outlineVIEw collapseItem:nil collapseChildren:YES]; [weakSelf.coreDataController._coreDataHelper.context performBlockAnDWait:^{ NSEntityDescription *entityDescription = [NSEntityDescription entityForname:@"SDRDfileObject" inManagedobjectContext:weakSelf.coreDataController._coreDataHelper.context]; NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:entityDescription]; NSArray * result = [weakSelf.coreDataController._coreDataHelper.context executeFetchRequest:request error:nil]; for (ID fileobject in result){ [weakSelf.coreDataController._coreDataHelper.context deleteObject:fileobject]; } [weakSelf.coreDataController._coreDataHelper.context processpendingChanges]; NSLog(@"Finished deleting all objects"); }]; }); } managedobjectcontext(context)作为类型NSMainQueueConcurrencyType运行,并且该方法在主线程上运行.有关改进的建议,或重置/刷新NSOutlineVIEw核心数据组合的有用示例将不胜感激.谢谢.干杯,特隆德
为了回应@TomHarringtons的问题,我拍了一张Time Profiler的照片.我真的不明白为什么它挂在这个方法上,然而,在评论这个方法(“`processpendingChanges“`)后,它仍然挂起并需要永远完成(6分钟).似乎这个过程卡在主线程上并且无法继续.
当我重新运行应用程序时,processpendingChanges注释掉它仍然挂起.
更新
我相信我已经解决了这个问题,但我对于为什么会这样做有点不确定.似乎我的第一个方法进入了一个无法释放其对象的无限循环.以下简单的解决方案有效:
__weak __typeof__(self) weakSelf = self; dispatch_sync(dispatch_get_main_queue(),^{ [weakSelf.coreDataController._coreDataHelper.context reset]; }); 我确信要正确清空托管对象上下文,我必须单独删除每个实体.重置功能似乎相当暴力,它实际上是否清理内存并确保一切正常?如果有人想对此有所了解,那将是值得赞赏的.
解决方法@H_419_32@ 再看一遍,你在performBlockAnDWait中获取了一个类型的所有对象 – 这会阻塞主线程,因为你有mainQueueConcurrency而你使用了andBait版本的performBlock.然后逐个删除每个对象.这些对象位于附加了outlinevIEw的树数据结构中(请参阅堆栈跟踪中的KVO消息).这些对象有许多需要由核心数据维护的关系,地狱,你甚至可以有一个级联删除规则. (请参阅堆栈跟踪中的propagateDelete和maintainInverseRelationship)无论如何,在主线程上开始请求数据源和视图开始执行大量工作.如果要迭代后台中的所有对象,可以尝试使用带有privateQueueConcurrency的子MOC.
但是,如同评论所示:
NSManagedobjectContext的重置绝对可以释放内存,而且你可以在这里做的事情很好:把一切都搞砸了.
然而,这就引出了为什么你首先从磁盘上的商店加载模型的问题.
如果您需要Core Data,但不需要在运行程序的时间之间保持持久性,则可以使用NSInMemoryStoreType存储来初始化persistentStoreCoordinator,而不是将其指向文件URL.
总结以上是内存溢出为你收集整理的objective-c – 重置Core Data驱动的treeController内容全部内容,希望文章能够帮你解决objective-c – 重置Core Data驱动的treeController内容所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)