MagicalRecord saveWithBlock 完成用法

MagicalRecord saveWithBlock completion usage

我正在使用 [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 在保存块的末尾正确设置,但在完成块中为零。这是正确的用法吗?

干杯, 一月

完成块在设置之前捕获 player 引用,因此当该块被执行时它将为 nil。

如果你想稍后使用新的托管对象,你应该将它存储在一个 属性 中,然后从完成块调用一个方法,(可能切换到主线程,不确定 MR 是否这样做为你)在主要上下文中找到该对象。

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