Core Data允许我保存,但是当我尝试删除对象时,我收到以下错误:
*** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0xa6b7e00 <x-coredata://8A687ECB-03F8-47C0-8470-087B9CF032B1-2801-00000A8C9A09CDB7/Notification/p2774005D-4B49-4378-A109-949F15D37032>'"
[self.managedObjectContext executeFetchRequest:allFetchRequest onSuccess:^(NSArray *results) {
NSLog(@"Fetch for Objects with origial_id");
if (results.count>0)
{
NSLog(@"original_id = %@", dlPlanDate.original_id);
NSLog(@"Results Recieved %i", results.count);
for (PlanDate *pd in results)
{
PlanDateResolved *pdResolved = [NSEntityDescription insertNewObjectForEntityForName:@"PlanDateResolved" inManagedObjectContext:self.managedObjectContext];
NSArray *keys = [[[pd entity] attributesByName] allKeys];
NSDictionary *dict= [pd dictionaryWithValuesForKeys:keys];
[pdResolved setValuesForKeysWithDictionary:dict];
[pdResolved setValue:[pd plandate_id] forKey:[pdResolved primaryKeyField]];
pdResolved.senderUser = pd.senderUser;
pdResolved.objectCreator = pd.objectCreator;
pdResolved.users = pd.users;
NSLog(@"pd.planDateID %@", pd.plandate_id);
[self.managedObjectContext saveOnSuccess:^{
NSLog(@"Saving Each Object in the Array to PlanDateResolved with Original ID");
[self.managedObjectContext deleteObject:pd];
[self.managedObjectContext saveOnSuccess:^{
NSLog(@"Deleted the pd Object object!");
} onFailure:^(NSError *error) {
NSLog(@"There was an error Deleting pd Object %@", error);
}];
} onFailure:^(NSError *error) {
}];
}
}
} onFailure:^(NSError *error) {
NSLog(@"Error fetching: %@", error);
}];
}
Run Code Online (Sandbox Code Playgroud)
日志:
2013-10-11 11:53:11.175 ST[2801:c07] Fetch for Objects with origial_id
2013-10-11 11:53:11.175 ST[2801:c07] original_id = CFADD5A7-C9E8-48B3-91B2-56FDBC0F9BAB
2013-10-11 11:53:11.175 ST[2801:c07] Results Recieved 3
2013-10-11 11:53:11.180 ST[2801:c07] pd.planDateID CFADD5A7-C9E8-48B3-91B2-56FDBC0F9BAB
2013-10-11 11:53:11.182 ST[2801:c07] pd.planDateID 5917071A-8CFD-4C7C-A60F-A76FA4814429
2013-10-11 11:53:11.183 ST[2801:c07] pd.planDateID 1998BB90-D6FC-4226-977C-3414C4A57078
2013-10-11 11:53:11.913 ST[2801:c07] You updated the Accepted object!
2013-10-11 11:53:11.913 ST[2801:c07] Saving Each Object in the Array to PlanDateResolved with Original ID
2013-10-11 11:53:11.913 ST[2801:c07] Saving Each Object in the Array to PlanDateResolved with Original ID
2013-10-11 11:53:12.155 ST[2801:c07] Saving Each Object in the Array to PlanDateResolved with Original ID
2013-10-11 11:53:35.482 ST[2801:c07] *** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0xa6b7e00 <x-coredata://8A687ECB-03F8-47C0-8470-087B9CF032B1-2801-00000A8C9A09CDB7/Notification/p2774005D-4B49-4378-A109-949F15D37032>''
*** First throw call stack:
(0x24e7012 0x1cfae7e 0x1a20a48 0x1a515e8 0x1ac2879 0x1a59627 0x1a59271 0x1ace025 0x1a53cc1 0x1e7f014 0x1e6ed5f 0x1e6eaa3 0x1a53c8b 0x1a53aee 0x1a30eac 0x1ab0c1 0x1a5398f 0x1e7f014 0x1e6f7d5 0x248daf5 0x248cf44 0x248ce1b 0x24027e3 0x2402668 0x92effc 0x418d 0x25c5)
libc++abi.dylib: terminate called throwing an exception
Run Code Online (Sandbox Code Playgroud)
Tom*_*ton 13
当托管对象不可访问时,这意味着Core Data无法在持久性存储文件中找到该对象.这有几个原因可以发生.
我不知道在哪里executeFetchRequest:onSuccess:,并saveOnSuccess:从何而来,但假设他们做他们的方法名字所暗示的是什么(和不可怕的越野车),没有明显的原因在上面的代码,为什么会发生这种事.所以它正在发生在你正在其他地方做的工作的副作用.
最有可能的是:您还在其他地方删除这些对象,并且在执行提取之后但代码崩溃之前的某个时间发生此删除.结果,当上面的代码试图删除它们时,它们已经消失了.这似乎是你使用异步运行的神秘核心数据的方法(基于这样的事实,你得到pd.planDateID达到崩溃点之前印刷多次),所以这可能是无论是在同一个线程,在不同的线程.
[所有这些都假定您的日志语句实际上来自您发布的代码.这有点令人怀疑,因为日志包含一条消息"你更新了接受的对象!" ,它没有出现在代码中.]
dze*_*sik 10
我同意Tom Harrington关于根本问题的解释.此外,知道自iOS 9以来这种行为已发生变化也是一件好事.在iOS 9上没有抛出NSObjectInaccessibleException,但会发生CoreData警告,如:
CoreData: warning: An NSManagedObjectContext delegate overrode fault
handling behavior to silently delete the object with ID '0xd0000000025c0006
<x-coredata://336D9F02-727B-42C5-AEDD-8007D4AB521D/Film/p151>' and substitute
nil/0 for all property values instead of throwing.
2015-09-10 15:27:09.799 PROJECTX[2141:818058] CoreData: error: Mutating a
managed object 0xd0000000025c0006 <x-coredata://336D9F02-727B-42C5-AEDD-
8007D4AB521D/Bla/p151> (0x12812bea0) after it has been removed from its
context.
Run Code Online (Sandbox Code Playgroud)
这不会导致崩溃,但会导致模糊的应用行为.
| 归档时间: |
|
| 查看次数: |
10107 次 |
| 最近记录: |