2

我一直在我的项目中使用 Core Data,我一直依靠它的数据故障系统来返回缓存的数据,但是我遇到了一些性能问题,尤其是在基于此配置其视图的 UITableView 中显示数据时获取的数据。

它基本上通过它们的唯一 ID 获取一些 NSManagedObject 实例,并总结存储在 NSNumber 中的值。它在 for 循环中对大约 40 个不同的对象执行此操作,并且每次重新加载 UITableView 时都会执行此操作。

是否有任何建议的方法来监听核心数据 NSManagedObjects 中的更改或在我的级别缓存数据的方法,或者我应该依赖数据故障而只是我做错了什么?

如果您能给我指出一个处理这种情况的好模式,我将非常感激。

4

3 回答 3

5

NSFetchedResultsController 提供了一个很好的机制来处理错误并为 UITableView 提供一个干净的接口。使用 Instruments 和 Time Profiler 可以很好地了解性能问题的具体位置。

于 2012-08-22T14:58:33.483 回答
1

您可以直接使用 Core Data 检索属性的总和。阅读标题为获取特定值的部分。

这应该是您需要的唯一提示:

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"Count"];
NSExpression *sumOfCountExpression = [NSExpression expressionForFunction:@"sum:"
                                          arguments:[NSArray arrayWithObject:keyPathExpression]];

这不应该太慢而导致问题,除非您重新加载表太多次。

于 2012-08-22T14:54:37.410 回答
1

您需要做的第一件事是使用 NSFetchedResultsController。它可以与 UITableview 一起使用,并且非常适合您在此处尝试完成的工作。第二件事,将 fetchBatchSize 分配给您的 fetch 请求。您不需要将所有记录保存在内存中。

于 2012-08-22T15:00:48.913 回答