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?

Все сохранения и создания выполняются в основном потоке.


person Alex    schedule 06.09.2012    source источник


Ответы (1)


Так что получается, что проблема заключалась в моем предикате, что делает это скорее проблемой 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];

По какой-то причине первый предикат не всегда точен. В то время как второй, кажется, всегда работает.

Хотя это действительно отвечает на вопрос, мне было бы любопытно, почему люди считают, что первый предикат не всегда работает...

person Alex    schedule 06.09.2012