保存到iOS托管对象上下文

时间:2012-12-11 20:12:09

标签: ios managedobjectcontext

我有以下代码将实体保存到托管对象上下文。

    NSError *savingError = nil;

    if ([self.managedObjectContext save:&savingError]) {
        NSLog(@"Successfully saved the context.");
    } else {
        NSLog(@"Failed to save the context. Error = %@", savingError);
    }

根据我的文档,我理解以下内容:在将新实体插入上下文后,我们必须保存上下文。这会将上下文的所有未保存数据刷新到持久性存储。我们可以使用托管对象上下文的save:实例方法来完成此操作。如果此方法的BOOL返回值为YES,我们可以确保保存上下文。

我不清楚的是save:之后的语法,特别是&符号'&'就在本地savingError variable之前。这告诉编译器是什么?

3 个答案:

答案 0 :(得分:2)

&运算符基本上是指“地址”。它接受一个值并返回指向该值的指针。因此,在这种情况下,&savingErrorNSError**类型的值,它是一个包含savingError变量地址的指针。然后,调用代码可以使用*error来“取消引用”该指针并获取变量。这意味着它可以说

*error = [NSError errorWithDomain:...]

然后在您的代码中,savingError变量现在将填充新错误。

这是C中相当常见的编程风格,用于模拟具有多个返回值。像这样的参数(指向值的指针,传递变量地址的函数和填充它的函数)通常称为“out-parameters”或“out-params”。

答案 1 :(得分:1)

看看:Why is `&` (ampersand) put in front of some method parameters?

简而言之:您需要传递指向NSError指针的指针,因此save:可以偶尔向savingError分配错误。

答案 2 :(得分:1)

&表示对象的地址。当我们将对象传递给方法时,该对象的副本已传递给它。在该方法中对该对象进行的任何更改都不会影响方法调用所使用的对象。

当我们使用&实际上我们传递了对象的地址,因此我们在该方法中对对象所做的改变将影响在方法调用中用作参数的对象。

save:方法中,我们传递了一个NSError类的对象。如果在使用此NSError对象可以找到Save方法(进程)期间发生某些错误。

[savingError localizedDescription];