Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用临时对象的父/子方法实现CoreData_Ios_Core Data_Nsmanagedobjectcontext - Fatal编程技术网

Ios 使用临时对象的父/子方法实现CoreData

Ios 使用临时对象的父/子方法实现CoreData,ios,core-data,nsmanagedobjectcontext,Ios,Core Data,Nsmanagedobjectcontext,问题:处理一堆数据的最佳方法是什么,这些数据中只有一些对象应该保存到coredata中的磁盘上 这就是应用程序/问题: 该应用程序将为用户提供在互联网上搜索不同项目的可能性。 搜索将返回一些将显示给用户的对象。 用户应该能够随时收藏这些对象中的任何一个。受欢迎的对象应连接到当前登录的用户,并在应用程序退出后处于活动状态 该应用程序将以iOS6为基础 我一直在使用这些资源 我目前正在研究使用3种上下文的父/子方法:主上下文、主上下文和约束上下文类型 当前可能的解决方案: 在磁盘上执行保

问题:处理一堆数据的最佳方法是什么,这些数据中只有一些对象应该保存到coredata中的磁盘上

这就是应用程序/问题: 该应用程序将为用户提供在互联网上搜索不同项目的可能性。 搜索将返回一些将显示给用户的对象。 用户应该能够随时收藏这些对象中的任何一个。受欢迎的对象应连接到当前登录的用户,并在应用程序退出后处于活动状态

该应用程序将以iOS6为基础

我一直在使用这些资源

我目前正在研究使用3种上下文的父/子方法:主上下文、主上下文和约束上下文类型

当前可能的解决方案:

  • 在磁盘上执行保存的MasterContext(具有persistentStoreCoordinator)
  • UI使用的MainContext(主上下文的子级)
  • BackgroundContext处理搜索中的新对象。(主上下文的孩子)
因此,用户可以进行搜索,返回100个对象(在后台上下文中导入并保存到主上下文中)。 其中2个对象是用户喜欢的(在maincontext上)。对象将添加到用户并设置为“应保存”。(保存时,对象将向上推送到主上下文)

当我保存mastercontext时,我不想将所有100个对象都保存到磁盘上。只有用户喜欢的两个对象

所以我想在主上下文上保存之前删除不应该保存到磁盘上的对象

- (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计时器,即可清理旧的/未使用的对象。