2010-12-07 56 views
0

我正面临着coredata一个非常奇怪的问题。 我有一个项目与IDS管理,我想更新一个简单的NSNumber动态属性。我这样做,因为总是在我的物品类别:CoreData的奇怪行为NsManagedObject

- (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未设置为新的值,我得到旧的。

什么推动我的坚果是,当我杀了我的应用程序,并重新开始,我的对象在那里,它运作良好。如果y更新我的命中数,我得到了良好的价值...

所以我认为我的问题是以某种方式连接到我的对象在CoreData的第一次插入... 有没有缓存我不是看见了什么?我必须做些什么来“使我的对象无效”吗?

有些帮助会非常棒!

回答

0

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

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