2010-12-12 55 views
0

我在iOS应用程序中使用CoreData来保存位置对象(名称,坐标)的简单列表。在CoreData记录出现损坏后,我在两次内存警告之后遇到了两次情况。CoreData:numberOfObjects in section incorrect

具体地,(在的tableView:numberOfRowsInSection :)

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

为第== 0,

然后返回4(在的tableView:的cellForRowAtIndexPath :)

aLocation = [fetchedResultsController objectAtIndexPath:indexPath]; 

为indexPath [ 0,3]产生一个例外:

NSRangeException:* - [_ PFArray objectAtIndex:]:index(3)beyond bounds(3)

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

两个问题:

1)任何关于这可能是如何产生的,以及如何防止它

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

感谢

斯蒂芬

回答

2

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

0

也许你需要重做获取内存警告[fetchedResultsController performFetch](只是猜测)

+0

嗨哈拉德 - 你可能是正确的,但可能的腐败只有在未处理的异常后重新启动应用程序后变得明显。我已经设法解决现在的内存警告的异常(一些奇怪的行为,只影响iPad 4.2(不是3.2),所以目前这个问题已经停止发生。有趣的是,在发布问题后,numberOfObjects中的差异是在对NSManagedObjectContext进行保存后修复。 – StephenT 2010-12-14 07:36:11

0

我自己也有同样的问题。我没有时间进行全面调查,但每次调用视图时,我都在不同的scratch managedObjectContext上设置了FetchController。

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