调试器在核心数据保存时停止,但没有错误输出

时间:2012-03-20 19:38:36

标签: objective-c ios core-data

我有一个简单的方法,只需要两个托管对象ID,为它们提取托管对象,建立关系,然后将它们保存到managedObjectContext中。

当我在managedObjectContext上执行保存时,调试器在保存行上停止,并且objc_exception_throw引用nsmanagedObjectContext保存。虽然输出的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);
}

}

1 个答案:

答案 0 :(得分:8)

如果在save:方法之后继续执行应用程序没有任何问题(即没有抛出任何未捕获的异常且没有报告任何错误),这意味着保存操作的实现已捕获异常并决定默默忽略它

为什么会发生这种情况还不清楚:可能实现依赖于报告内部错误的异常(这不是应该使用Objective-C异常的方式,而是一些其他语言更多地使用异常)。只要异常在到达您自己的代码之前被捕获,您就不必担心它。

如果您想知道异常的原因,可以在objc_exception_throw上中断并使用以下调试器命令:

po *(id *)($ebp + 8)

这将显示iOS模拟器(x86架构)中为该函数指定的NSException *参数。在设备(arm架构)上,使用(如果我的记忆正确地为我服务)可以实现相同的结果:

po $r0