NSLog,NSError,访问不良

时间:2009-12-11 17:40:56

标签: objective-c cocoa nslog nserror

我正在为NSPersistentStoreCoordinator做一个相当普通的addPersistentStore,它生成了一个&错误代码。

所以我去了NSLog,当我这样做时出现了访问错误:

    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);

这似乎是常见的习语。

当我按如下方式重新格式化错误语句时:

     NSLog(@"Unresolved error   %@",   [error userInfo]);

......问题消失了。

即便是NSZombie也没有正确捕获错误的访问错误!

有什么想法吗?

2 个答案:

答案 0 :(得分:18)

你是如何捕获错误的?

正确的方式是described by bbum

NSError *error;
BOOL success = [blah blah:blah error:&error];
if (!success) {
    NSLog(@"Error: %@ %@", error, [error userInfo]); //Or other error handling (e.g., [NSApp presentError:error]).
} else {
    //Succeeded—ignore the error variable entirely
}

(那是一个返回blah:error:的方法BOOL;问题bbum中的例子是一个返回一个对象的方法。错误处理模式对于两种情况都是一样的。 )

根据他之后不久的Twitter更新,some APIs will output an error object under the hood even if what you asked for succeeded,这意味着测试错误变量而不是BOOL返回可能会欺骗你。我想这就是发生在你身上的事。

如果API报告失败,解决方案是查看错误对象。

答案 1 :(得分:1)

不要忘记使用nil值初始化NSError

NSError* err = nil;
[anObject doSomethingGetError:&err];
if (err) {
    NSLog(...);
}

如果这没有用,那就是API bug