【问题标题】:IOS Core-Data concurrency issuesIOS Core-Data 并发问题
【发布时间】:2013-10-31 01:50:27
【问题描述】:

我再次介绍了我的 RSS Reader iApp,目前它的设计方式如下:

  • 数据模型:Category -> Feed -> Post
  • 主视图:Feeds 按类别分组
  • 详细视图:Posts 对于给定的Feed

所有视图和应用程序委托仅与同一个_mainMOC (ManagedObjectContext) 交互。

每个创建的 NSOperations 都将使用自己的_localMOC,该_localMOC 连接到同一个 NSPersistentStoreCoordinator。

当应用程序启动时,它会为每个 Feeds 创建一个 fetchOp NSOperation,并将其添加到 NSOperationQueue。这应该确保 RSS Feeds 将被单独下载、解析,然后它们的内容将由 Post 插入到 CoreData 中的 Post

AppDelegate 观察NSManagedObjectContextDidSaveNotifications 并在它收到的notification 不是_mainMOC 时合并修改。然后它发送一个特定的 NSNotification 来通知每个视图需要reloadData

问题:

  • 我还需要将我的 _mainMOC save: 操作包含在 performBlock 块中吗?
  • 我的每个视图是否应该只使用_localMOC 而不是_mainMOC
  • 让每个视图的本地 NSFetchedResultsController 在 reloadData 之前重新执行提取不是多余的吗?
  • 是否应该将任何非只读核心数据操作设为排队的 NSOperation,即使在视图级别也是如此?
  • 我怎样才能让这一切变得更顺畅(现在还没有,而且我还有一些可怕的错误,所以重新设计是可能的)...

感谢您的帮助。

【问题讨论】:

    标签: core-data concurrency nsoperation master-detail


    【解决方案1】:

    1) & 2) 看来这些不是绝对必需的:毕竟我们在主线程中。

    3) 这不会有什么坏处:特别是如果 NSFecthedResultsController 使用变量 NSPredicate(请参阅here)。

    4) 无论如何我都会这样做,因为它不会造成伤害。

    5) 保持联系...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-08
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 2011-09-19
      相关资源
      最近更新 更多