2012-09-06 75 views
1

我正在使用神奇記錄來處理核心數據。我有一個創建一個實體,看起來如下代碼:MR_save似乎刪除上下文中的對象

if (gameEntity == nil) 
{  
    gameEntity = [GameEntity MR_createEntity]; 
} 
gameEntity.opponent = opponent; 
gameEntity.me = me; 
etc... 

當我再查詢遊戲實體如下:

NSPredicate* gamePredicate = [NSPredicate predicateWithFormat:@"SELF IN %@ AND gameState != %@", me.myGames, GAME_ENTITY_STATE__OTHER]; 
NSFetchRequest* fetchRequest = [GameEntity MR_requestAllWithPredicate:gamePredicate]; 
NSArray * results = [[NSManagedObjectContext MR_defaultContext] executeFetchRequest:fetchRequest error:nil]; 
return results; 

結果的大小爲1(這是有道理的)。

但是當我保存上下文如下:

[[NSManagedObjectContext MR_defaultContext] MR_save]; 

並運行上述相同fetchRequest,突然的GameEntity不見了,有在NSArray中沒有結果。

即使是很奇怪,當我關閉應用程序並再次運行它時,它會找到GameEntity。所以它實際上被拯救了。爲什麼MR_save實質上打破了我的NSManagedObject上下文?

所有保存和創建正在主線程上運行。

回答

0

所以事實證明,問題是我的謂詞,這使得這更多的CoreData問題,而不是一個神奇的記錄。

我改變從這個謂詞:

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF IN %@ AND gameState != %@", me.myGames, GAME_ENTITY_STATE__OTHER]; 

要這樣:

predicate = [NSPredicate predicateWithFormat:@"me == %@ AND gameState != %@", me, GAME_ENTITY_STATE__OTHER]; 

出於某種原因,第一個謂語並不總是準確。而第二個似乎總是工作。

雖然這確實回答了這個問題,但我很好奇爲什麼人們會相信爲什麼第一個謂詞不總是有效......

相關問題