【问题标题】:setFetchLimit and sectionNameKeyPath on iPhone OS4 (XCode 3.2.3) cause crashiPhone OS4 (XCode 3.2.3) 上的 setFetchLimit 和 sectionNameKeyPath 导致崩溃
【发布时间】:2010-06-25 08:05:11
【问题描述】:

以前,在带有 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“sections”和 numberOfObjects 返回持久存储中的所有值,忽略设置的 Limit。

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

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

问题的一个例子:

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

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

【问题讨论】:

  • Apple 已知此问题。我报告了一个错误,他们正在处理它。

标签: iphone crash iphone-sdk-3.2 ios4


【解决方案1】:

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

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

[NSFetchedResultsController deleteCacheWithName:@"myCacheName];

希望对您有所帮助, 马特

【讨论】:

  • 谢谢马特,我没有使用缓存。我用 Apple 记录了一个错误。这是一个已知问题,他们正在解决这个问题。最终,我从 NSFecthedResultsController 中删除了分组,并手动复制了分组/节结构。
  • 我遇到了同样的问题,当我添加缓存时,一切似乎都正常工作。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多