【问题标题】:Implementing CoreData using the parent/child approach with temporary objects使用带有临时对象的父/子方法实现 CoreData
【发布时间】:2012-12-09 02:26:12
【问题描述】:

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

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

该应用将以 iOS6 为基础。

我一直在使用这些资源

我目前正在研究使用 3 种上下文的父/子方法:Master、Main 和 Confinement 上下文类型。

当前可能的解决方案:

  • 在磁盘上执行保存的MasterContext(具有persistentStoreCoordinator)
  • UI 使用的 MainContext(masterContext 的子级)
  • BackgroundContext 处理来自搜索的新对象。 (mainContext 的子级)

因此,用户可以进行搜索,返回 100 个对象(在后台上下文中导入并保存到主上下文中)。 其中 2 个对象受到用户的青睐(在主上下文中)。该对象将被添加到用户并设置为“应该保存”。 (在保存时,对象将被推送到主上下文)

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

所以我考虑在我保存 mastercontext 之前删除不应该保存到磁盘的对象。

- (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
    }
}];
}

但是在我理解之后,当在父上下文上执行保存时,所有更改都将传播给子级。然后我将释放除已存储的两个之外的所有对象。

那么有人知道如何解决这类问题吗?我可以在上面的例子中做些什么吗?或者我应该创建多个持久存储并在上下文之间移动对象?

感谢所有愿意提供帮助的人,如果需要更多信息,请询问:)

【问题讨论】:

  • 为所有结果创建对象,然后删除不喜欢的对象。仅在将应用置于后台时保存。
  • 另外,为什么不使用查询 favorited == NO 来删除要删除的项目?
  • 但是如果用户正在查看搜索结果,请选择一些对象并关闭应用程序。我认为用户希望在后台打开应用程序时仍然拥有数据。
  • 是的——但我的意思是不需要经常调用 save 。除非你害怕崩溃:)

标签: ios core-data nsmanagedobjectcontext


【解决方案1】:

在一个类似的项目中,我使用了这个也受到用户青睐的解决方案:

在下载的项目中保留时间戳属性,并在时间戳超过某个阈值时将其删除并且它们未被标记为收藏。

【讨论】:

  • 那么,您是否愿意全部保存在内存中,将它们保存到磁盘,然后删除在给定时间戳后未标记为收藏的所有对象?
  • 不在内存中,在持久存储中。您可以使用NSFetchedResultsController 来最小化内存占用。是的,如果它们在时间戳之后,请定期删除它们。
  • 我会试试的。这感觉是一种不错的方法,因为存储到磁盘将在后台线程中进行。我会在需要时保存。正如@nielsbot 提到的那样。
  • 我确实最终使用了这种方法。只需使用每 X 秒/分钟运行一次的 GCD 计时器来清理旧的/未使用的对象。
猜你喜欢
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多