gpt4 book ai didi

ios - 将 NSDictionary 中的字符串值转换为 long 使应用程序崩溃

转载 作者:行者123 更新时间:2023-12-02 03:05:12 24 4
gpt4 key购买 nike

我有一个从服务器 API 获取的 NSDictionary 对象。数据是这样的,

"filesize_mp3":"60488"

当我使用以下代码检索文件大小时,应用程序崩溃。 obj.filesize 为 long 类型。

obj.filesize = [[dict objectForKey:@"filesize_mp3"] longValue],

lldb 控制台,

2014-07-22 12:50:14.643 YouVoiceNews[2019:60b] -[__NSCFString longValue]: unrecognized selector sent to instance 0x9bf8e102014-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'

but when I use

obj.filesize = (long)[dict objectForKey:@"filesize_mp3"]; 

一切都很好。

所以我的问题是上述两种方式有什么区别。为什么第一个会导致应用程序崩溃?

提前致谢。

最佳答案

问题1的回答:以上两种方式有什么区别?

  1. 第一种方法尝试将消息 -longValue 发送到存储在键 @"filesize_mp3"处的对象
  2. 第二种方法尝试将指针转换为存储在键@“filesize_mp3”处的对象

回答问题 2:为什么第一个问题会导致应用崩溃?

  1. 存储在键@“filesize_mp3”处的对象是一个NSString,而-longValue是一个无效的选择器。首先编译代码的原因是因为 [dict objectForKey:@"filesize_mp3"] 没有输入(它是一个 id),并且为了方便 id 将在编译时接受任何选择器。下面提供了一种稍微保守的方法;将对象转换为 NSString 将不允许 [filesizeStr longValue]
  2. 第二种方法不会崩溃,因为您只是将指针转换为 long。虽然它不会给您带来任何感兴趣的内容,但它是一个有效的操作。

回答你没有问的问题:我应该做什么?

你的字典包含NSString,而不是NSNumber,也不是int或long。字典是NSObject的集合。因此,您必须将这些字符串转换为 intlong 或您认为合适的任何格式。

NSString * filesizeStr = [dict objectForKey:@"filesize_mp3"];
obj.filesize = [filesizeStr longLongValue];

关于ios - 将 NSDictionary 中的字符串值转换为 long 使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24879164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com