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 它应该工作)。
我正在使用 [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 它应该工作)。