6

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

所以我去了NSLog它,当我这样做时遇到了访问错误:

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

这似乎是常见的成语。

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

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

...问题消失了。

甚至 NSZombie 也没有正确捕获错误的访问错误!

有任何想法吗?

4

2 回答 2

18

你是如何发现错误的?

如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:返回 a的方法BOOL;bbum 回答的问题中的示例是针对返回对象的方法。两种情况的错误处理模式都是相同的。)

根据他不久后的 Twitter 更新,即使您要求的内容成功,某些 API 也会在后台输出错误对象,这意味着测试错误变量而不是BOOL返回值可能会欺骗您。我想这就是发生在你身上的事情。

解决方案是在 API 报告失败时查看错误对象。

于 2009-12-11T18:04:02.073 回答
1

不要忘记用 nil 值初始化 NSError

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

如果这没有帮助,那就是 API 错误

于 2009-12-11T18:09:20.520 回答