【问题标题】:How can I suspend the working of an NSFetchedResultsController?如何暂停 NSFetchedResultsController 的工作?
【发布时间】:2010-12-12 05:05:51
【问题描述】:

我有一个由 NSFetchedResultsController 提供的 UITableViewController。从它,用户可以调用一个模态视图控制器,他或她可以在其中输入新数据。在此开始时,我创建一个临时对象,如下所示:

newPtr = [[Entry alloc] initWithEntity:[NSEntityDescription
entityForName:@"Entry" inManagedObjectContext:self.nmocontext]
insertIntoManagedObjectContext:self.nmocontext];

当用户做出选择时,这个“临时”对象 newPtr 的属性会被设置。

问题在于,当模态 ViewController 可见时,基本 UITableViewController 仍然处于活动状态。在某些情况下,当它意识到尚未设置 newPtr 的强制属性时,它似乎会吓坏(导致崩溃)。

我可以做些什么来阻止 NSFetchedResultsController 查看我的托管对象上下文,直到模式 ViewController 被解除?

【问题讨论】:

    标签: core-data ios4 nsfetchedresultscontroller modalviewcontroller


    【解决方案1】:

    Core Data 支持“嵌套”托管对象上下文,它允许灵活的架构,从而可以轻松支持独立、可取消的更改集。使用子上下文,您可以允许用户对托管对象进行一组更改,然后这些更改可以作为单个事务批量提交给父对象(并最终保存到商店),也可以丢弃。如果应用程序的所有部分都只是简单地从应用程序委托中检索相同的上下文,那么就会使这种行为难以或无法支持。

    【讨论】:

      【解决方案2】:

      我自己没有对此进行测试,但一种可能的方法是实现 viewWillAppearviewWillDisappear,并将 fetchedResultsController 委托设置为 self on 将出现nil on 会消失

      您可以在编辑窗口中创建一个反映 NSManagedObject 属性的 NSObject。一旦用户完成了属性的编辑(并且您已经运行了适当的验证规则),您就可以将它们传递回您的 NSManagedObject 实例并让 fetchedResultsController 完成它的工作。

      【讨论】:

      • 谢谢!非常有趣的想法,我认为会奏效。我最终做的(因为 Stack Overflow 宕机了几个小时)是给 newPtr 一些假属性来满足 fetchedResultsController。这工作......
      猜你喜欢
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2012-08-27
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多