MagicalRecord saveWithBlock завершение использования
Я использую [MagicalRecord saveWithBlock: completion:]
метод, но я не уверен, как получить доступ к сохраненному объекту в блоке завершения. Мой код следующий
NSLog(@"saving player");
__block PSPlayer *player;
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
// parse json
player = [self parsePlayer:playerInfoJson inContext:localContext];
NSLog(@"player.md5Id %@", player.md5Id);
} completion:^(BOOL success, NSError *error) {
NSLog(@"player.md5Id in success %@ error %@", player.md5Id, error);
...
}];
player.md5Id
правильно установлен в конце блока сохранения, но равен нулю в завершении. Это правильное использование?
ура, Ян
1 ответ
Блок завершения захватывает player
ссылка до того, как она установлена, поэтому она будет равна нулю, когда этот блок будет выполнен.
Если вы хотите использовать новый управляемый объект позже, вы должны сохранить его в свойстве, а затем вызвать метод из блока завершения (возможно, переключаясь на основной поток, не уверен, что MR сделает это за вас), чтобы найти этот объект в основной контекст.
В качестве альтернативы я думаю, что вы могли бы определить блок завершения раньше, а затем передать copy
к методу, то копия будет иметь доступ к обновленной player
ссылка (на самом деле я делаю это не очень часто, но IIRC должен работать).