2011-09-18 117 views
0

我想知道,如果有人能够澄清以下从苹果的核心数据文档:核心数据获取持久性

的更改不会反映到控制器的管理对象 方面已经收到了processPendingChanges消息之后。因此,如果 您更改被管理对象的属性的值,以使其在提取结果控制器的结果集中的位置发生更改,则 其控制器报告的索引通常不会更改 ,直到当前事件周期结束(当processPendingChanges 被调用时)。例如,下面的代码片段将登录 “同”:

NSFetchedResultsController *frc = <#A fetched results controller#>; 
NSManagedObject *managedObject = <#A managed object in frc's fetchedObjects array#>; 
NSIndexPath *beforeIndexPath = [frc indexPathForObject:managedObject]; 
[managedObject setSortKeyAttribute: 
        <#A new value that changes managedObject's position in frc's fetchedObjects array#>; 
NSIndexPath *afterIndexPath = [frc indexPathForObject:managedObject]; 
if ([beforeIndexPath compare:afterIndexPath] == NSOrderedSame) { 
    NSLog(@"same"); 
} 

到底是什么“通常不会改变,直到当前事件周期的结束”呢?我在我的代码中遇到了这种情况,但是我不确定是否可以100%依赖我的索引保持相同的状态,直到我明确地预先保存了托管对象上下文为止。上面的代码是否可以修改,而不对上下文执行保存,这样它就不会记录“相同”?

回答

1

不能确定我是否可以100%地依靠我的索引保持相同的 ,直到我明确地预先保存我的托管对象上下文为止。

我不会。 “当前事件循环”是运行循环的当前迭代。

+0

+1 runloop处理如此之快(除非你阻止它),它在用户界面中的效果无法被用户识别。 – TechZen

+0

我想我很困惑,为什么文档继续提供一个代码示例,说它应该工作,如果它不是应该完成的。如果我在UITableView委托中有类似的代码,moveRowAtIndexPath会阻止运行循环直到完成? –

+0

我还没有在文档中查找过这个例子,但我会说这只是证明了这一点,而不是“应该工作”或“不应该完成”的事情。整个事情只是一个警告:如果您更改frc的排序键,则结果顺序不会更改,直到运行循环完成。 – Caleb