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(...);
}