2010-12-07 3 views
0

私はcoredataに非常に奇妙な問題に直面しています。 私はidsで管理されているアイテムを持っており、単純なNSNumberである動的プロパティを更新しようとしています。私は私の項目クラスで、いつものようにこれを行う:私からいくつかのデータを受け取った後、CoreDataの奇妙な動作NsManagedObject

[NSEntityDescription insertNewObjectForEntityForName:@"item" 
    inManagedObjectContext:[self getManagedObjetContextForCurrentThread]]; 

は、その後、私は私のヒットを更新:

- (int) hits{ 
    return [self.hitNS intValue]; 
} 

- (void) setHits:(int)h{ 
    self.hitNS=[NSNumber numberWithInt:h]; 
} 

は基本的に、私はこの方法で私の管理、オブジェクトを作成しますサーバ。 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

これは、取得/設定管理コンテキストが同期されていないことを意味します。

コンテキストを保存した後に、NSManagedObjectContextDidSaveNotificationが送信され、これらの変更に関心のある他のすべてのコンテキストでこの通知が行われてから、mergeChangesFromContextDidSaveNotificationを使用して同期する必要があります。