我有一个NSMutablearray,它包含NSArrays(每个数组都包含int和String值)。 当我尝试从第一个数组中检索并显示数据时: 使用int值就可以了,它显示正确。
NSLog(@"%i",[[[lesQuestions objectAtIndex:0] objectAtIndex:0] intValue]);
但是当我尝试显示字符串值时:
NSLog(@"%@",[[[lesQuestions objectAtIndex:0] objectAtIndex:1] stringValue]);
我有例外:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString stringValue]: unrecognized selector sent to instance
我绝对肯定int值是第一项(索引0)而String值是第二项(索引1)。 当我记录持有NSArrays的MutableArray时,我得到了正确的值,所以问题在于我猜的项目的引用。
答案 0 :(得分:6)
数组中的对象已经是NSString,因此不需要调用stringValue。 NSString没有实现一个名为stringValue的方法,因此你看到了异常。就这样做:
NSLog(@"%@",[[lesQuestions objectAtIndex:0] objectAtIndex:1]);
-intValue
是一个由NSNumber实现的方法,用于从NSNumber实例中获取整数原语,假设数组中的第一个对象是NSNumber(或者是一个NSNumber),则使用intValue
是正确的。 NSString,它也实现了-intValue
)。
所有这一切,我一般认为将不同类的实例存储在同一个数组中是一个好主意,就像你正在做的那样。您可能最好使用NSDictionary,其中每个值都使用唯一键存储,例如@"index"
表示数字,@"name"
表示字符串。
答案 1 :(得分:1)
NSLog分别标准对象显示自己的能力比你想象的更强大。
NSLog(@"%@",[[lesQuestions objectAtIndex:0] objectAtIndex:0]);
NSLog(@"%@",[[lesQuestions objectAtIndex:0] objectAtIndex:1]);
除非你有非常多的数组元素,否则你甚至可以发现它很有用:
NSLog(@"%@",[lesQuestions objectAtIndex:0]);
或
NSLog(@"%@",lesQuestions);
试一试!