CoreData:Section中的numberOfObjects不正确

时间:2010-12-12 02:36:13

标签: iphone objective-c cocoa core-data ios

我在iOS应用程序中使用CoreData来保存一个简单的位置对象列表(名称,坐标)。在内存警告之后,当CoreData记录看起来已损坏时,我现在遇到了两次情况。

具体来说,(在tableView中:numberOfRowsInSection:)

NSUInteger numObjects = [[[fetchedResultsController sections] objectAtIndex:section] numberOfObjects];

为section == 0返回4。

然后(在tableView中:cellForRowAtIndexPath:)

aLocation = [fetchedResultsController objectAtIndexPath:indexPath];
indexPath [0,3]的

生成异常:

NSRangeException: * - [_ PFArray objectAtIndex:]:index(3)超出范围(3)

即。 CoreData表示表中有4行,但是当表视图请求时,它不能返回最后一行的对象。

两个问题:

1)关于如何产生这种情况以及如何防止它的任何想法

2)一旦发生,有没有办法解决代码中的数据问题?

由于

斯蒂芬

3 个答案:

答案 0 :(得分:2)

问题似乎是CoreData缓存中的一些不一致导致了这一点 - 不清楚是什么导致它,因为谓词永远不会改变。如果在访问fetchedResultsController中的最后一个对象时引发异常,我最终调用了deleteCacheWithName。这似乎解决了这个问题(用户在6个月内没有问题)。

答案 1 :(得分:0)

也许您需要在内存警告[fetchedResultsController performFetch]之后重做抓取(只是猜测)

答案 2 :(得分:0)

我自己也有同样的问题。我没有时间进行全面调查,但每次调用视图时,我都会在不同的临时托管对象上设置FetchController。

将cacheName设置为nil解决了我的问题。由于数据量很小,没有缓存的问题并不是太多。