2

以前,在带有 XCode 3.2.2 的 iPhone OS 3.2 上,这曾经可以正常工作。

我创建了一个小测试来证明这一点。一个具有 2 个属性的 NSManagedObject,“group”和“vaue”。两个字符串。

在设置要在 TableViewController 中使用的 NSFetchedResultsController 时,我在请求中设置了 setFetchLimit 并将 sectionNameKeyPath 设置为“组”,因为我希望将结果实体分组到部分中。

前一种行为(之前的 iPhone OS 4 和 XCode 3.2.3)将返回包含限制中指定的最大实体数量的实体的结果集。

使用新的 OS 和 XCode,每个部分中的 FecthedResultsController“部分”和 numberOfObjects 返回持久存储中的所有值,忽略设置的限制。

但是当委托方法尝试访问数据时,它不存在,它会生成一个 [_PFBatchFaultingArray objectAtIndex:]: index (X) beyond bounds (X)',这是我设置的限制,并导致应用程序崩溃。

在我看来,当使用自 3.2.3/OS 4 以来引入的限制和部分时,SDK 中存在一个错误。

问题的一个例子:

在数据存储组“A”中包含“3”项,组“B”包含“2”项,组“C”包含“2”项(即项目总数 7),并且限制设置为7、所有部分将被退回。如果限制设置为小于 7,应用程序将崩溃。

还有其他人遇到这个问题吗?

4

2 回答 2

1

一个部分崩溃了。解决方案是马特的建议和大卫的回答的混合体;我将 cacheName 设置为 nil:

- (id)initWithFetchRequest:managedObjectContext:sectionNameKeyPath:**strong text**cacheName:**strong text**
于 2010-08-18T22:24:19.510 回答
1

升级后我遇到了类似的事情。

我发现添加删除缓存的调用似乎可以解决我的问题。

[NSFetchedResultsController deleteCacheWithName:@"myCacheName];

希望有帮助,马特

于 2010-06-29T23:27:39.320 回答