Let*_*ies 1 objective-c nsstring ios
我有一个来自服务器API的NSDictionary对象.数据是这样的,
"filesize_mp3": "60488"
当我使用以下代码来检索文件大小时,应用程序崩溃.obj.filesize是long类型.
obj.filesize = [[dict objectForKey:@"filesize_mp3"] longValue],
Run Code Online (Sandbox Code Playgroud)
lldb控制台,
2014-07-22 12:50:14.643 YouVoiceNews[2019:60b] -[__NSCFString longValue]: unrecognized selector sent to instance 0x9bf8e10 2014-07-22 12:50:14.644 YouVoiceNews[2019:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString longValue]: unrecognized selector sent to instance 0x9bf8e10'
但是当我用的时候
obj.filesize = (long)[dict objectForKey:@"filesize_mp3"];
Run Code Online (Sandbox Code Playgroud)
一切都好.
所以我的问题是上述两种方式之间的区别是什么.为什么第一个导致应用程序崩溃
提前致谢.
回答问题1:上述两种方式之间的区别是什么?
-longValue到存储在key @"filesize_mp3"中的对象回答问题2:为什么第一个导致应用程序崩溃?
NSString,并且-longValue是无效的选择器.首先编译代码的原因是因为[dict objectForKey:@"filesize_mp3"]没有输入(它是一个id),为方便起见,id它将在编译时接受任何选择器.下面提供了一种稍微保守的方法; 将对象转换为a NSString将不允许[filesizeStr longValue].回答你没有问的问题:我该怎么做?
您的词典包含NSString,而NSNumber不是int或long.字典是一个集合NSObject.因此,你必须将这些字符串转换成int,long或任何格式,你认为合适的.
NSString * filesizeStr = [dict objectForKey:@"filesize_mp3"];
obj.filesize = [filesizeStr longLongValue];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1535 次 |
| 最近记录: |