ios 检查空对象
Posted
技术标签:
【中文标题】ios 检查空对象【英文标题】:ios checking for an empty object 【发布时间】:2012-06-04 17:22:52 【问题描述】:我通过引用我在网上找到的一些代码传递了一个错误。错误以空对象的形式返回,这意味着没有错误。
如果我检查error.code
,我会得到一个错误的访问权限,因为对象是空的。
如果我检查error == nil
,我会得到一个false,因为error
是一个空对象。
如何使用逻辑发现错误存在,但为空?
【问题讨论】:
您误诊了问题。没有“空对象”之类的东西。我怀疑您没有正确检查是否成功并且正在取消引用一个悬空指针。发布您正在使用的代码,也许有人可以提供帮助。 【参考方案1】:错误通常是NSError
类型或其子类。它们在以这种方式声明的方法中作为引用传递:
-(void)DoSomeStuff:(NSError **)error;
因此,当您调用需要传递对 NSError
的引用的方法时,您可以这样调用它:
NSError *error = nil;
[self DoSomeStuff:&error];
当这个方法完成它的工作时,你检查错误对象是否真的被填充了一些东西:
if(error)
//Do some stuff if there is an error.
//To see the human readable description you can:
NSLog(@"The error was: %@", [error localizedDescription]);
//To see the error code you do:
NSLog(@"The error code: %d", error.code);
else //There is no error you proceed as normal
//Do some other stuff - no error
附:如果您没有收到错误并且该方法未按预期运行,则此方法的实现存在问题。尤其是开源的东西,很容易出现编码错误,所以你可以看看这个方法做了什么,如果有问题可以调试甚至修复......
【讨论】:
if(error)
并不是大多数 Apple API 的设计方式。大多数 Apple API 返回 BOOL
以指示是否发生错误。无法保证成功后错误指针为nil
。
有趣,你有没有抓到这样的案例——成功,但是错误被初始化了,反之? Apple 对 ex 的异步方法有何建议。 -(void)DoSomeStuffAsync:(void(^)(NSError *error))completionBlock
,例如,我可以在哪里看到我的异步方法在某些时候失败了?
我个人没有抓到一个,因为我遵循 API 并检查返回值。 There's more details on this mistake here,包括官方文档的链接。
异步的东西似乎不会成为问题,除非它是多线程的,在这种情况下使用 @synchronized
就像任何其他多线程代码一样。以上是关于ios 检查空对象的主要内容,如果未能解决你的问题,请参考以下文章