我在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)一旦发生,有没有办法解决代码中的数据问题?
由于
斯蒂芬
答案 0 :(得分:2)
问题似乎是CoreData缓存中的一些不一致导致了这一点 - 不清楚是什么导致它,因为谓词永远不会改变。如果在访问fetchedResultsController中的最后一个对象时引发异常,我最终调用了deleteCacheWithName。这似乎解决了这个问题(用户在6个月内没有问题)。
答案 1 :(得分:0)
也许您需要在内存警告[fetchedResultsController performFetch]
之后重做抓取(只是猜测)
答案 2 :(得分:0)
我自己也有同样的问题。我没有时间进行全面调查,但每次调用视图时,我都会在不同的临时托管对象上设置FetchController。
将cacheName设置为nil解决了我的问题。由于数据量很小,没有缓存的问题并不是太多。