关于托管对象上下文:保存到iOS托管对象上下文

Saving to iOS managed object context

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

1
2
3
4
5
6
7
    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,则可以确保保存out上下文。

我不清楚的是save:之后的语法,特别是局部savingError variable之前的与号'&'。 这告诉编译器什么?


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

1
*error = [NSError errorWithDomain:...]

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

这是C语言中非常常见的编程样式,用于模拟具有多个返回值。像这样的参数(指向值的指针,您在其中传递变量的地址,然后函数将其填充)通常称为"输出参数"或"输出参数"。


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

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

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

1
[savingError localizedDescription];


看一下:为什么在某些方法参数前面加上"&"(与号)?

简而言之:您需要将一个指针传递给NSError指针,因此save:可以将偶然的错误分配给savingError