【问题标题】:Core Data working with subset of full data store...HOW?核心数据使用完整数据存储的子集......如何?
【发布时间】:2014-01-26 22:43:20
【问题描述】:

我正在拼命想在 Core Data 中找出一些我认为应该很容易做到的东西,我需要一些帮助。

我有一个数据存储,其中包含过去两年的数据,但在我的应用程序中,我有一定的标准,以便用户只使用该数据的子集(即仅过去一个月)。我已经创建了谓词来生成获取请求并且一切正常。

我的问题是,我想在这个数据子集上运行一些额外的谓词(即我只想要 name=Sally 的对象)。我想这样做,而不必使用附加谓词(在 NSCompoundPredicate 中)重新运行原始谓词;我宁愿只在已经创建的数据子集上运行它。

我可以只对提取结果运行一个谓词吗?

谓词的格式是否与对核心数据存储的初始调用相同?

感谢您的帮助。

【问题讨论】:

    标签: ios objective-c core-data nspredicate nsmanagedobjectcontext


    【解决方案1】:

    您可以使用谓词过滤原始结果数组。请参阅 NSArray 的过滤数组使用Predicate 方法。

    【讨论】:

      【解决方案2】:

      我会考虑做你所说的唯一原因是如果你发现在 FetchedResultsController 级别修改谓词会导致性能显着下降。

      我的建议是在视图控制器中获取对 fetchedResultsController 的引用,并使用与其他搜索参数匹配的复合谓词更新谓词。

      如果您将 viewControllers 数据源绑定到谓词的谓词,您将无法正确利用 NSFetchedResultsControllers 委托方法,这些方法允许轻松、动态地更新视图,例如表视图和集合视图。

          /* assuming you're abstracting your datastore with a singleton */
          self.fetchedResultsController = [DataStore sharedStore].fetchedResultsController;  
          self.fetchedResultsController.delegate = self;
          [self.fetchedResultsController.fetchRequest setPredicate:yourPredicate]; 
      

      确保将获取请求的批处理大小配置为合理的值,以提高性能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-06
        • 1970-01-01
        相关资源
        最近更新 更多