NSFetchedResultsSectionInfo不同意它有多少个对象

gle*_*enc 7 iphone nsfetchedresultscontroller

我在Apple dev论坛上发布了这个,因为它让我感觉像是实际SDK中的一个错误,但我想我也会在这里发布它,看看是否有人可以验证我是否正在使用这个东西错误(看起来不像)或者这是破碎的行为.

https://devforums.apple.com/thread/72738

-

在花了一些时间调试一些代码之后,我发现了一个非常奇怪且令人担忧的实例NSFetchedResultsSectionInfo.

NSFetchedResultsController *frc = [self frcForTableView:tableView];

id <NSFetchedResultsSectionInfo> sectionInfo = [[frc sections] objectAtIndex:
                                                [indexPath indexAtPosition:1]];

NSLog( @"Looking at %@ with section %@ (%d objects)",
       indexPath, [sectionInfo objects], [sectionInfo numberOfObjects] );
Run Code Online (Sandbox Code Playgroud)

基本上,我抓住一个FRC,然后从其中拉出一个sectionInfo对象(不要担心为什么我抓住索引路径位置1而不是0 ......这应该不重要).有趣的是,上面的NSLog输出是这样的:

Looking at <NSIndexPath 0x8828ee0> 2 indexes [0, 0] with section (
    "TBN.B x 1 for order 1187",
    "TBN.T x 1 for order 1187"
) (1 objects)`
Run Code Online (Sandbox Code Playgroud)

因此[sectionInfo objects]数组中有两个东西,但[sectionInfo numberOfObjects]报告它只有一个.为了消除缓存问题的可能性,我在运行此代码之前禁用了FRC设置中的所有缓存.

这里很难过.不知道单个sectionInfo对象如何能够自己不同意它有多少个对象.

来自Apple开发者的任何想法?运行XCode 3.2.4和4.1 SDK.

编辑: FYI这个部分的正确对象实际上是第一个(TBN.B)所以在我的测试中到目前为止看来,如果你只考虑对象数组的部分,numberOfObjects那么你得到了正确的结果.然而,仍然好奇为什么额外的对象出现在数组的末尾时,它不是该部分的一部分.

dav*_*vid 0

我的测试表明,第一部分的“对象”数组始终包含控制器中的所有对象。我认为这是一个框架错误。

这是一个非常脏(而且慢)的解决方法:

NSArray * allObjects = self.cachedFetchedResultsController.fetchedObjects;
NSMutableArray * objectsInSectionZero = [NSMutableArray array];
for (id obj in allObjects) {
    if ([[self.cachedFetchedResultsController indexPathForObject:obj] section] == indexPath.section) {
        [objectsInSectionZero addObject:obj];
    }
}
Run Code Online (Sandbox Code Playgroud)