iPhone OS4(XCode 3.2.3)上的setFetchLimit和sectionNameKeyPath导致崩溃

时间:2010-06-25 08:05:11

标签: iphone crash iphone-sdk-3.2 ios4

以前,在带有XCode 3.2.2的iPhone OS 3.2上,这曾经很好用。

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

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

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

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

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

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

问题的一个例子:

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

其他人是否遇到此问题?

2 个答案:

答案 0 :(得分:1)

升级后我遇到了一些模糊的东西。

我发现添加一个删除缓存的调用似乎解决了我的问题。

[NSFetchedResultsController deleteCacheWithName:@"myCacheName];

希望有所帮助, 马特

答案 1 :(得分:1)

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

- (id)initWithFetchRequest:managedObjectContext:sectionNameKeyPath:**strong text**cacheName:**strong text**