Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSLog,NSError,访问错误_Objective C_Cocoa_Nslog_Nserror - Fatal编程技术网

Objective c NSLog,NSError,访问错误

Objective c NSLog,NSError,访问错误,objective-c,cocoa,nslog,nserror,Objective C,Cocoa,Nslog,Nserror,我对一个NSPersistentStoreCoordinator执行了一个相当普通的addPersistentStore,它生成了一个错误代码(&C) 因此,我转到了NSLogit,在执行此操作时出现了一个访问错误: NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 这似乎是常见的习语 当我重新格式化错误语句时,如下所示: NSLog(@"Unresolved error %@", [error u

我对一个
NSPersistentStoreCoordinator
执行了一个相当普通的addPersistentStore,它生成了一个错误代码(&C)

因此,我转到了
NSLog
it,在执行此操作时出现了一个访问错误:

    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
这似乎是常见的习语

当我重新格式化错误语句时,如下所示:

     NSLog(@"Unresolved error   %@",   [error userInfo]);
…问题消失了

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


有什么想法吗?

你是如何发现错误的

正确的方法是:

(这是针对返回
BOOL
的方法
blah:error:
;bbum回答的问题中的示例是针对返回对象的方法。两种情况下的错误处理模式相同。)

根据他不久后在Twitter上的更新,这意味着测试错误变量而不是
BOOL
return可以愚弄你。我想这就是发生在你身上的事


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

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

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

如果这没有帮助,那么如果API使用无效(或有效但无意义的)对象对
nil
初始值设定项进行重击,则API bug

将没有帮助。请参阅我的答案和@bbum引用的推文。如果没有任何错误,API将不会触及“err”引用[为零]。-(NSPersistentStore*)addPersistentStoreWithType:(NSString*)storeType配置:(NSString*)配置URL:(NSURL*)storeURL选项:(NSDictionary*)选项错误:(NSError**)错误;此方法返回的不是BOOL类型实际上,将err对象设置为nil仅表示您有兴趣检查err对象(如果发生)@Peter Hosey的回答显示了确定方法调用是否成功的正确方法。@vaddieg通常可以从返回值判断调用是否成功,文档对此总是很清楚的。例如,在这种情况下:“新创建的存储,或者,如果发生错误,则为零。”。瓦迪格:不,这是不正确的。再次,请看我在回答中引用的@bbum的推文。即使API在返回时成功,某些API也会写入错误变量(从而使初始化它的
nil
)。
NSError* err = nil;
[anObject doSomethingGetError:&err];
if (err) {
    NSLog(...);
}