【问题标题】:Core Data and Magical Record saving核心数据和神奇记录保存
【发布时间】:2014-02-28 00:38:55
【问题描述】:
这是一个基本的问题,但需要澄清一下。
我有这段代码。
//line of code #1
[localContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
//line of code #2
}];
代码行#2 是完成块吗?我是否应该在另存为代码 #1 行显示之前对实体进行更改?
谢谢
【问题讨论】:
标签:
ios
objective-c
core-data
magicalrecord
【解决方案1】:
任何形式为^(…) { … } 或^{ … } 的都是block。本质上,一个块是可移植的一块不直接执行的代码。可以将块保存到变量中,然后在稍后的时间点执行。
typedef void (^my_block_t)();
my_block_t myBlock = ^{
NSLog(@"I'm in a block");
};
这是一个打印日志语句的块。该块被保存到变量myBlock。注意:此时,NSLog 不会打印出任何内容。
在稍后的某个时间点,可以执行myBlock。
myBlock();
此时,代码块已运行,NSLog 打印出它的语句。
如果您的示例,第 2 行代码的执行会延迟到保存完成之后。
从逻辑上讲,它的工作原理与:
步骤 1) 执行代码行 #1
步骤 2) 执行保存
步骤 3) 执行代码行#2
因为第 2 行代码中的事情是在保存完成后发生的,所以此时对模型的任何更改都不会被保存。