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 runloop处理如此之快(除非你阻止它),它在用户界面中的效果无法被用户识别。 – TechZen
我想我很困惑,为什么文档继续提供一个代码示例,说它应该工作,如果它不是应该完成的。如果我在UITableView委托中有类似的代码,moveRowAtIndexPath会阻止运行循环直到完成? –
我还没有在文档中查找过这个例子,但我会说这只是证明了这一点,而不是“应该工作”或“不应该完成”的事情。整个事情只是一个警告:如果您更改frc的排序键,则结果顺序不会更改,直到运行循环完成。 – Caleb