MagicalRecord saveWithBlock完成用法

时间:2015-01-19 21:51:11

标签: ios objective-c magicalrecord-2.2

我正在使用[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中为零。这是正确的用法吗?

欢呼声, 扬

1 个答案:

答案 0 :(得分:0)

完成块在设置之前捕获player引用,以便在执行该块时它将为nil。

如果您想稍后使用新的托管对象,则应将其存储在属性中,然后从完成块调用方法(可能切换到主线程,不确定MR是否为您执行此操作)以查找主要背景下的对象。

或者我认为您可以提前定义完成块,然后将copy传递给该方法,然后该副本可以访问更新的player引用(我不经常这样做)真的,但IIRC它应该工作)。