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
那么你得到了正确的结果.然而,仍然好奇为什么额外的对象出现在数组的末尾时,它不是该部分的一部分.
我的测试表明,第一部分的“对象”数组始终包含控制器中的所有对象。我认为这是一个框架错误。
这是一个非常脏(而且慢)的解决方法:
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)
归档时间: |
|
查看次数: |
901 次 |
最近记录: |