Ios 使用临时对象的父/子方法实现CoreData
问题:处理一堆数据的最佳方法是什么,这些数据中只有一些对象应该保存到coredata中的磁盘上 这就是应用程序/问题: 该应用程序将为用户提供在互联网上搜索不同项目的可能性。 搜索将返回一些将显示给用户的对象。 用户应该能够随时收藏这些对象中的任何一个。受欢迎的对象应连接到当前登录的用户,并在应用程序退出后处于活动状态 该应用程序将以iOS6为基础 我一直在使用这些资源Ios 使用临时对象的父/子方法实现CoreData,ios,core-data,nsmanagedobjectcontext,Ios,Core Data,Nsmanagedobjectcontext,问题:处理一堆数据的最佳方法是什么,这些数据中只有一些对象应该保存到coredata中的磁盘上 这就是应用程序/问题: 该应用程序将为用户提供在互联网上搜索不同项目的可能性。 搜索将返回一些将显示给用户的对象。 用户应该能够随时收藏这些对象中的任何一个。受欢迎的对象应连接到当前登录的用户,并在应用程序退出后处于活动状态 该应用程序将以iOS6为基础 我一直在使用这些资源 我目前正在研究使用3种上下文的父/子方法:主上下文、主上下文和约束上下文类型 当前可能的解决方案: 在磁盘上执行保
- 在磁盘上执行保存的MasterContext(具有persistentStoreCoordinator)
- UI使用的MainContext(主上下文的子级)
- BackgroundContext处理搜索中的新对象。(主上下文的孩子)
- (void) mainContextHasSaved: (NSNotification *) notification {
NSLog(@"Lets save the master");
[_masterManagedObjectContext performBlock:^{
//Loop through all inserted object and check if they should be saved to disk
[self removeObjectThatShouldNotBeSavedToDisk];
NSError *error = nil;
BOOL saveSuccess = [_masterManagedObjectContext save:&error];
if(saveSuccess) {
//Do something
}
}];
}
但我了解到,当在父上下文上执行保存时,所有更改都将传播到子上下文。然后我会松开所有的东西,除了两个已经储存的东西
那么有人知道如何解决这类问题吗?在上面的例子中,我能做些什么吗?或者我应该创建多个PersistentStore并在上下文之间移动对象
感谢所有愿意提供帮助的人,如果需要更多信息,请询问:)在一个类似的项目中,我使用了此解决方案,该解决方案也受到了用户的青睐:
在下载的项目中保留时间戳属性,并在时间戳超过某个阈值且未标记为收藏夹时将其删除。为所有结果创建对象,然后删除非收藏夹。仅当应用程序放在后台时保存。此外,为什么不使用查询favorited==否来获取要删除的项目?但是如果用户正在查看搜索结果,请选择一些对象并关闭应用程序。我认为当应用程序从后台打开时,用户仍希望保留数据。是的,但我的意思是不需要经常调用save。除非你害怕崩溃:)那么你会把所有的东西都放在内存中,保存到磁盘上,然后删除所有在给定时间戳后没有标记为收藏夹的对象吗?不在内存中,在持久存储中。您可以使用
NSFetchedResultsController
最小化内存占用。是的,如果它们在时间戳之后,请定期删除它们。我将尝试这样做。这感觉是一种不错的方法,因为存储到磁盘将在后台线程中。我会在需要的时候存钱。正如@nielsbot所提到的,我最终使用了这种方法。只需使用每X秒/分钟运行一次的GCD计时器,即可清理旧的/未使用的对象。