ada*_*101 5 core-data objective-c ios
我有一个简单的方法,只需要两个托管对象ID,为它们提取托管对象,建立关系,然后将它们保存到managedObjectContext中.
当我在managedObjectContext上执行保存时,调试器在保存行上停止,并带有引用nsmanagedObjectContext保存的objc_exception_throw.虽然输出的nserror对象中没有输出来给我任何有关抛出异常的详细信息.它看起来好像这个保存工作正常,这使得这更令人困惑.
这是有问题的方法......
- (void)relateLocationToInvite:(NSManagedObjectID *)locationID :(NSManagedObjectID *)inviteID {
NSManagedObject *invite = [self.managedObjectContext objectWithID:inviteID];
NSManagedObject *locationObj = [self.managedObjectContext objectWithID:locationID];
Location *location = (Location *)locationObj;
[invite setValue:location forKey:@"location"];
NSError *error = nil;
if( ![self.managedObjectContext save:&error] ){
NSLog(@"Error relating a location to an invite %@",error);
}
Run Code Online (Sandbox Code Playgroud)
}
如果在save:方法之后继续执行应用程序没有任何问题(即没有抛出任何未捕获的异常并且没有报告任何错误),这意味着保存操作的实现已捕获异常并决定默默地忽略它.
为什么会发生这种情况还不清楚:可能实现依赖于报告内部错误的异常(这不是应该使用Objective-C异常的方式,而是一些其他语言更多地使用异常).只要异常在到达您自己的代码之前被捕获,您就不必担心它.
如果您想知道异常的原因,可以objc_exception_throw使用以下调试器命令:
po *(id *)($ebp + 8)
Run Code Online (Sandbox Code Playgroud)
这将显示NSException *iOS模拟器(x86架构)中为该函数指定的参数.在设备(arm架构)上,使用(如果我的内存正确地为我服务)可以实现相同的结果:
po $r0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
854 次 |
| 最近记录: |