这是一个基本问题,但需要一些说明。
我有这段代码。
//line of code #1
[localContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
//line of code #2
}];
代码行 #2 是完成 block 吗?我是否应该在保存为代码行 #1 显示之前对实体进行更改?
谢谢
最佳答案
任何具有 ^(…) { … }
或 ^{ … }
形式的都是 block .本质上, block 是可移植的代码块,它不会直接执行。 block 可以保存到变量中,然后在稍后的时间点执行。
typedef void (^my_block_t)();
my_block_t myBlock = ^{
NSLog(@"I'm in a block");
};
这是一个打印日志语句的 block 。该 block 保存到变量 myBlock
。注意:此时 NSLog
没有打印出任何东西。
在稍后的某个时间点,可以执行myBlock
。
myBlock();
在代码的这一点上, block 被运行并且 NSLog
打印出它的语句。
如果您的示例中,代码行 #2 的执行被延迟到保存完成之后。
逻辑上,它的工作原理与:
Step 1) execute line of code #1
Step 2) execute save
Step 3) execute line of code #2
因为代码行 #2 中的事情发生在保存完成之后,所以此时不会保存对模型的任何更改。
关于ios - 核心数据和魔法记录保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22083888/