我做这样的事情:iOS版 - 异常检查时,如果字符串为空
// GET THE USER ID
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *user_id = [standardUserDefaults objectForKey:@"user_id"];
然后检查USER_ID是否为空
if ([user_id length] == 0) {
proceed = false;
NSLog(@"Error: User id is not set.");
}
我得到这个运行时异常:
*由于未捕获异常'NSInvalidArgumentException'而终止应用程序,原因: ' - [__ NSCFBoolean length]:无法识别的选择器发送到实例0x1469f70'
任何想法,为什么我得到异常?我不认为我所做的事情有什么不妥。
谢谢!
实际上我想获得实际的user_id值,这是我放在那里的字符串值。从standardUserDefaults获取该字符串的正确方法是什么?谢谢! – GeekedOut 2012-07-26 17:09:47
我们怎么能这么肯定'user_id'是NSString的类型的呢?它可能是一个字母数字或数字字符串。 – samfisher 2012-07-26 17:10:25
@GeekedOut如果用户默认的存储号码,您必须存储的号码。它不会更改类型。只是为了确认:'user_id'是真正的局部变量 - 这不只是你张贴的问题是,它使一个快速编辑?尝试添加'NSLog(@“%@”,[user_id class])或'if([user_id isKindOfClass:[NSNumber class]])NSLog(@“是number”)'来说服自己。 @samfisher引发的异常表明'length'被发送到的对象的类型是'NSCFBoolean',并且这是'NSNumber'的一个私有子类(后者在实践中是一个集群)。 – Tommy 2012-07-26 17:12:19