Ios 核心数据是否会延迟刷新数据模型?

Ios 核心数据是否会延迟刷新数据模型?,ios,core-data,fetched-property,Ios,Core Data,Fetched Property,我面临一个问题,当我试图修改它时,核心数据在谓词中看不到任何变化。我花了很多时间试图找出为什么我的fetched属性不能显示正确的结果(请参见下面的代码),最后在又一次休息后,我发现(突然!)我的fetched属性开始工作正常。更新数据模型是否有延迟? 还是我应该更经常地休息 -(void)printData{ NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Empl"]; NSError *error

我面临一个问题,当我试图修改它时,核心数据在谓词中看不到任何变化。我花了很多时间试图找出为什么我的fetched属性不能显示正确的结果(请参见下面的代码),最后在又一次休息后,我发现(突然!)我的fetched属性开始工作正常。更新数据模型是否有延迟? 还是我应该更经常地休息

-(void)printData{
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Empl"];
NSError *error;
NSArray *empls = [[self managedObjectContext] executeFetchRequest:request error:&error];

for (NSManagedObject *emplMO in empls){

    NSString *output = [NSString stringWithFormat:@"%@ \n", [emplMO valueForKey:@"emplName"]];
    [self.managedObjectContext refreshObject:emplMO mergeChanges:YES];
    NSArray *allChairs = [emplMO valueForKey:@"allChairs"];
    output = [output stringByAppendingFormat:@" has %d chairs \n", allChairs.count];
    NSLog(@"%@", output);
}
}

您是否在整个应用程序中使用单一NSManagedObjectContext

来自苹果开发者

NSManagedObjectContext的实例表示应用程序中的单个“对象空间”或便笺簿……通过上下文,您可以从持久性存储中检索或“提取”对象,对这些对象进行更改,然后放弃更改或再次通过上下文将其提交回持久性存储。上下文负责监视其对象中的更改,并维护一个撤消管理器,以便您可以对撤消和重做进行更细粒度的控制


听起来,如果您有两个上下文,那么在contextA中更改的对象将需要持久化以存储,然后再次返回,以便contextB看到它们。。。UIManagedDocument执行自动保存。如果使用2个或更多上下文,您可能会在核心数据更新/获取中看到轻微的延迟/间隙。

两件事:(1)这些对象最近被修改了多久?是在你调用这个方法之前吗?(2) 调用refreshObject:mergeChanges的目的是什么?@TomHarrington(1)我尝试了几种变体:在将Emp/assets插入cd之后调用“printData”,然后在重新启动应用程序之后调用(当“printData”的结果错误时,我停止应用程序,然后清理/重建它。下次启动模拟器时,结果仍然不正确。)我无法找到此问题的任何规律性。它只是突然消失。在它消失后,我尝试更改获取属性的谓词(即,为所有笔记本电脑获取)但重新启动模拟器后,我仍然得到了关于椅子的输出。所以我认为模型刷新有一些延迟。@TomHarrington(2)我认为它对我的情况很有用。我刚刚尝试启动我的应用程序,但它崩溃了,出现了一个错误
。用于打开存储的模型与用于创建存储的模型不兼容
。这是因为我上次使用xcode时(几个小时前)修改了fetched属性的谓词.但我清楚地记得,上次应用程序没有崩溃。它只是忽略了我上次的修改。如果你更改数据模型,就会发生这种情况。是的,MOC是单一的。我的应用程序是一个小型谓词训练应用程序,所以我从不希望它有其他上下文