获取对象intvalue的最安全方法

iRa*_*oda 1 int objective-c

简单问题[Objective-C] :(到现在为止找不到任何解决方案).

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

任何帮助都是真诚的感谢.

编辑:

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

hyb*_*ttt 5

有两种最常见的方式:

第一种方法:

检查,其他字符串实际上可以响应intValue.或检查是否NSStringNSNumber.

NSString *string = ...;
int intValue = ([string respondsToSelector:@selector(intValue)]) ? [string intValue] : 0;
Run Code Online (Sandbox Code Playgroud)

为方便起见,您可以为此编写宏

#define intValueFromAnyObject(obj) ([obj respondsToSelector:@selector(intValue)]) ? [obj intValue] : 0;
int intValue = intValueFromAnyObject(string);
Run Code Online (Sandbox Code Playgroud)

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

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

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

@implementation NSNull (myExtension)
- (int)intValue
{
    return 0;
}
@end
Run Code Online (Sandbox Code Playgroud)

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