简单问题[Objective-C] :(到现在为止找不到任何解决方案).
我知道[id intValue];.然而,这会崩溃我的应用程序,因为NSString <Null>有时可以在我的应用程序中.我可以轻松地检查这是否是"然后",然后相应地做出决定.但是我有很多这样的情况(不能递归使用等)并且想知道什么是确保我的应用程序不会崩溃的最佳方法.
任何帮助都是真诚的感谢.
编辑:
在我的情况下,我从我的服务器获得JSON响应.我从中创建了一个NSDictionary.但是,在我的回复中,我可能会得到<NSNull>(正是这样,由于服务器API中存在问题.Objective-C将此(id)视为NSNull类.在这种情况下我应该寻找什么?
有两种最常见的方式:
第一种方法:
检查,其他字符串实际上可以响应intValue.或检查是否NSString或NSNumber.
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.