我正在为NSPersistentStoreCoordinator
做一个相当普通的addPersistentStore,它生成了一个&错误代码。
所以我去了NSLog
,当我这样做时出现了访问错误:
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
这似乎是常见的习语。
当我按如下方式重新格式化错误语句时:
NSLog(@"Unresolved error %@", [error userInfo]);
......问题消失了。
即便是NSZombie也没有正确捕获错误的访问错误!
有什么想法吗?
答案 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