基本上,我试图在从 a 中删除 a 后访问 a 的一些属性NSManagedObjectContext
并保存上下文。问题是,保存上下文后,Core Data 将对象数据标记为错误,并且显然无法恢复它。
我创建了一个示例项目来重现该问题,您可以下载它here https://www.dropbox.com/sh/flz7f9yhwhzgvkm/AABuk3a5q3trQEzxN7IDiyepa?dl=0。为了说明这一点,请看以下片段:
City *city = [self.cities objectAtIndex:indexPath.row];
[self.managedObjectContext deleteObject:city];
if (![self.managedObjectContext save:&error]) {
[self.managedObjectContext rollback];
NSLog(@"Error: %@", error);
}else{
NSLog(@"%@", city);
// All properties of "city" are zeroed.
// Saved. Update data sources and animate changes...
}
产生:
<City: 0x7fe1cbd3cba0> (entity: City; id: 0xd000000000040004 <x-coredata://C1E3D3D8-188D-41DE-B701-08AF6D3E8860/City/p1> ; data: {
country = "0xd000000000080002 <x-coredata://C1E3D3D8-188D-41DE-B701-08AF6D3E8860/Country/p2>";
name = Rosario;
})
<City: 0x7fe1cbd3cba0> (entity: City; id: 0xd000000000040004 <x-coredata://C1E3D3D8-188D-41DE-B701-08AF6D3E8860/City/p1> ; data: <fault>)
我想在删除托管对象后访问它的原因是更新NSMutableArray
它充当表视图的数据源,并更新导航控制器堆栈中先前控制器中的另一个数据源(这在示例项目中未实现)。
总结一下,我的问题是:
删除一个后NSManagedObject
从它的NSManagedObjectContext
并保存上下文,不再保证托管对象中的数据可访问?即使保留对该托管对象的引用?
根据我的研究,一旦保存上下文,核心数据就会删除实体数据以节省内存。这个假设正确吗?是否还有其他因素可能导致此数据错误?
Thanks.
An NSManagedObject
始终是动态渲染的。因此,如果删除它,Core Data 就会错误地删除数据。它不再存在了。您真正的问题是如何从各种数组中删除对象?首先,您应该在使用您希望的任何搜索技术删除对象之前将其删除。这是最简单、最稳健的路径。其次,对象指针本身仍然有效并且可以与-removeObject:
称呼。但请允许我强调,这是一个脆弱的解决方案。我强烈建议您在删除该对象之前先将其删除。
在回答你的第二个问题时,
是否还有其他因素可能导致此数据错误?
否。删除对象会导致故障。如果数据迄今为止已经可用,那是因为它是一种实现特征。编写实现而不是规范,尤其是数据库技术,充满了各种生命周期问题。引用明智的医生的话:“不要这样做。”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)