1

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

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

真诚感谢任何帮助。

编辑:

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

4

2 回答 2

6

有两种最常见的方式:

第一种方法:

检查,字符串是否真的可以响应intValue. 或者检查它是否是NSStringNSNumber

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。

于 2013-10-24T15:24:12.887 回答
3
int value = (string) ? [string intValue] : 0;

string 为 nil 时返回 0 或其他值

于 2013-10-24T15:08:19.187 回答