如何在Objective-C中检查有效对象?

时间:2014-04-19 07:52:58

标签: ios objective-c

我继承了从Web服务解析并填写NSDictionary的代码。在我将要探索的某些情况下,解析器返回计数为5的NSDictionary,但对象无效。发送给他们的任何消息都会因无法识别的选择器而失败,即使isKindOfClass:失败。

当我 po 控制台中的对象时,我看到了:

error: Execution was interrupted, reason: Attempted to dereference an invalid
ObjC Object or send it an unrecognized selector.
The process has been returned to the state before expression evaluation.

如果isKindOfClass:在这里不起作用,我如何检查对象是否无效?

这是崩溃期间控制台的输出。您会看到包含5个空对象的字典,对象9上的po将返回无效消息。

enter image description here

这是大词典中的po:

enter image description here

我希望我能够在解析器中检查问题,但我也对如何检查该无效对象以防止崩溃感兴趣。

2 个答案:

答案 0 :(得分:5)

问题在于您尝试使用整数访问字典元素,如果对象是字典,则键应该是符合复制协议的任何obj-c对象。您使用0作为integer索引,原始类型不是obj-c对象,您应该将其包装成NSNumber
另一个问题是NSJSONSerializer返回id类型对象,基于解析后的JSON结构,这可能是字典或数组,您应该始终检查返回的对象以检查类型。我通常总是期望一个字典数组,如果系统只返回一个字典,我只需要那个对象即可创建一个数组。

答案 1 :(得分:2)

你的宝想要一个数组 - 但它是一本字典。

这不会起作用

字典无法用整数编制索引,因为它没有objectForSubscriptIndex