gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 04:27:52 24 4
gpt4 key购买 nike

我有一个简单的方法,只需要两个托管对象 ID,为它们提取 managedObjects,建立关系,然后将它们保存到 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);
}

最佳答案

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

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

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

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

这将显示在 iOS 模拟器(x86 架构)中为函数提供的 NSException * 参数。在设备(arm 架构)上,使用(如果我没记错的话)可以实现相同的结果:

po $r0

关于objective-c - 调试器在核心数据保存时停止但没有错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9793704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com