我正面临着一个非常奇怪的问题。 我有一个使用ids管理的项目,我正在尝试更新动态属性,这是一个简单的NSNumber。我一如既往地在我的项目类中执行此操作:
- (int) hits{
return [self.hitNS intValue];
}
- (void) setHits:(int)h{
self.hitNS=[NSNumber numberWithInt:h];
}
基本上,我用这种方法创建我的托管对象:
[NSEntityDescription insertNewObjectForEntityForName:@"item"
inManagedObjectContext:[self getManagedObjetContextForCurrentThread]];
然后我从服务器收到一些数据后更新我的命中。 CoreData告诉我它更新了项目,但是当我再次访问该项目时:
-(NSArray *) getStoredEntities:(NSString*)entity withPredicate:(NSPredicate*)predicate
{
NSManagedObjectContext *moc=[self getManagedObjetContextForCurrentThread];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:entity
inManagedObjectContext:moc]];
if (predicate)
[request setPredicate:predicate];
NSError *error = nil;
NSArray *fetchResults = [moc executeFetchRequest:request error:&error];
[request release];
return [fetchResults objectAtIndex:0];
}
Item *i=(Item*)[self getStoredEntity:@"Item"
withPredicate:[NSPredicate predicateWithFormat:@"(id==%@)", itemId]];
我的属性item.hits未设置为新值,我得到旧值。
让我疯狂的是,当我杀死我的应用程序并重新开始时,我的目标就在那里,它运作良好。如果你更新我的命中数,我会得到很好的价值......
所以我认为我的问题在某种程度上与我在CoreData中首次插入对象有关... 有没有我没看到的缓存?我是否必须做一些事情来“使我的对象无效”?
一些帮助真的很棒!
答案 0 :(得分:0)
这意味着您的get / set托管上下文未同步。
保存上下文后,会发送NSManagedObjectContextDidSaveNotification
,并且对这些更改感兴趣的所有其他上下文都必须遵守此通知,然后使用mergeChangesFromContextDidSaveNotification
进行同步。