保存到iOS托管对象上下文
我有以下代码将实体保存到托管对象上下文保存到iOS托管对象上下文,ios,managedobjectcontext,Ios,Managedobjectcontext,我有以下代码将实体保存到托管对象上下文 NSError *savingError = nil; if ([self.managedObjectContext save:&savingError]) { NSLog(@"Successfully saved the context."); } else { NSLog(@"Failed to save the context. Error = %@", savingError);
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:
之后的语法,特别是本地savingeror变量
前面的符号“&”。这会告诉编译器什么 操作符&
的基本意思是“的地址”。它接受一个值并返回指向该值的指针。因此,在本例中,&savingeror
是一个NSError**
类型的值,它是一个指针,用于保存savingeror
变量的地址。然后调用代码可以使用*error
来“取消引用”该指针并返回变量。这意味着它可以说
*error = [NSError errorWithDomain:...]
然后在您的代码中,savingeror
变量现在将填充新的错误
这是C中一种相当常见的编程风格,用于模拟具有多个返回值。像这样的参数(指向值的指针,您在其中传递变量的地址并由函数填充)通常称为“out Parameters”或“out params”。请看:
简而言之:您需要传递一个指向NSError指针的指针,因此
save:
可以将偶然错误分配给savingeror
表示对象的地址。当我们将对象传递给一个方法时,对象的副本已经传递给了它。在该方法中对该对象所做的任何更改都不会影响用于方法调用的对象
当我们使用&时,实际上我们传递了对象的地址,因此我们在该方法中对对象所做的任何更改都会影响在方法调用中用作参数的对象
在这里的save:
方法中,我们将传递一个NSError类的对象。如果在保存过程中发生错误,可以使用此NSError对象找到方法(进程)
[savingError localizedDescription];