2

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

-(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);
}
}

这是我的模型。

4

1 回答 1

0

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

来自苹果开发者参考:

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

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

于 2013-05-17T15:34:18.930 回答