CoreData NsManagedObject的奇怪行为

时间:2010-12-07 12:02:10

标签: iphone core-data

我正面临着一个非常奇怪的问题。 我有一个使用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中首次插入对象有关... 有没有我没看到的缓存?我是否必须做一些事情来“使我的对象无效”?

一些帮助真的很棒!

1 个答案:

答案 0 :(得分:0)

这意味着您的get / set托管上下文未同步。

保存上下文后,会发送NSManagedObjectContextDidSaveNotification,并且对这些更改感兴趣的所有其他上下文都必须遵守此通知,然后使用mergeChangesFromContextDidSaveNotification进行同步。