简单问题[Objective-C] :(到目前为止找不到任何解决方案)。
我知道[id intValue];
。但是这会导致我的应用崩溃,因为NSString有时会在我的应用中<Null>
。我可以轻松地检查这是否是“然后”,然后相应地做出决定。但是我有很多这样的情况(不能递归使用等等)并且想知道什么是确保我的应用程序不会崩溃的最佳方法。
真诚地感谢任何帮助。
编辑:
在我的情况下,我从服务器获得JSON响应。我从中创建了一个NSDictionary。但是,在我的回复中,我可能得到<NSNull>
(正如这样,由于服务器API中的问题。目标-C认为这个(id)是NSNull类。在这种情况下我应该寻找什么?
答案 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或其他返回值