sno*_*und 4 casting nsdictionary nsstring
所以我有以下代码导致XCode中的运行时错误
NSString* temp = [[param objectforkey@"firstParam"] stringValue];
int tempNum = [[param objectforkey@"secondParam"] intValue];
Run Code Online (Sandbox Code Playgroud)
param从plist加载.firstParam是字符串,secondParam是数字
第一行崩溃了程序.
现在有趣的是,如果我做了一个艰苦的种姓,它是有效的,即:
NSString* temp = (NSString*)[param objectforkey@"firstParam"];
int tempNum = [[param objectforkey@"secondParam"] intValue];
Run Code Online (Sandbox Code Playgroud)
只是想知道为什么id会有不一致的实现,因为我必须使用intValue来转换为int,但是必须进行硬转换以获得NSString?为什么不stringValue?
你第一次调用objectForKey返回一个对象NSString. NSString没有一个stringValue方法,这就是生成运行时错误的原因.获得stringValue已经是字符串的东西是没有意义的.
第二次调用objectForKey返回一个NSNumber.NSNumber确实有一个intValue方法,所以它不会导致错误.
在第二种情况下,您NSNumber要将返回值的类型更改为int.在第一种情况下,返回的对象已经是一个,NSString并且没有必要尝试获取stringValue字符串.
调用[param objectforkey@"firstParam"]DOES返回一个NSString,因此不需要调用stringValue.此外,NSString没有名为"stringValue"的方法,因此这是您问题的根源.
请致电: NSString *temp = (NSString *)[param objectForKey:@"firstParam"];
另请注意,选择器是objectForKey : ,而不是objectforkey :(大写很重要).
并且,回答你的问题,NSNumber是一个类,所以任何对象都不是"int",而是NSNumber指针.intValue返回一个实际的"int",因为floatValue返回一个"float"(NSNumber可以表示任何类型的数字).在NSString的情况下,这是不必要的,因为只有一种类型的NSString(但是,有一种方法可以返回一个const char *,而且会被用来char *string = [[param objectForKey:@"firstParam"] cString];......对于Objective-C应用来说并不是很有用).
| 归档时间: |
|
| 查看次数: |
11209 次 |
| 最近记录: |