获取对象intvalue的最安全方法

时间:2013-10-24 15:04:20

标签: objective-c int

简单问题[Objective-C] :(到目前为止找不到任何解决方案)。

我知道[id intValue];。但是这会导致我的应用崩溃,因为NSString有时会在我的应用中<Null>。我可以轻松地检查这是否是“然后”,然后相应地做出决定。但是我有很多这样的情况(不能递归使用等等)并且想知道什么是确保我的应用程序不会崩溃的最佳方法。

真诚地感谢任何帮助。

编辑:

在我的情况下,我从服务器获得JSON响应。我从中创建了一个NSDictionary。但是,在我的回复中,我可能得到<NSNull>(正如这样,由于服务器API中的问题。目标-C认为这个(id)是NSNull类。在这种情况下我应该寻找什么?

2 个答案:

答案 0 :(得分:5)

有两种最常见的方式:

第一种方法:

检查,其他字符串实际上可以响应intValue。或者检查它是NSString还是NSNumber

NSString *string = ...;
int intValue = ([string respondsToSelector:@selector(intValue)]) ? [string intValue] : 0;

为方便起见,您可以为此

编写宏
#define intValueFromAnyObject(obj) ([obj respondsToSelector:@selector(intValue)]) ? [obj intValue] : 0;
int intValue = intValueFromAnyObject(string);

第二种方式(我更喜欢):

在NSNull上写一个类别,这样当你发送一个无法识别的选择器(例如intValue)时它就不会崩溃

@interface NSNull (myExtension)
- (int)intValue;
@end

@implementation NSNull (myExtension)
- (int)intValue
{
    return 0;
}
@end

从现在开始,只要你尝试从NSNull对象获取intValue,你就会得到0。

答案 1 :(得分:3)

int value = (string) ? [string intValue] : 0;
当string为nil时,

0或其他返回值