Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 解析JSON,有时获取数字而不是字符串_Ios_Iphone_Objective C_Json_Nsstring - Fatal编程技术网

Ios 解析JSON,有时获取数字而不是字符串

Ios 解析JSON,有时获取数字而不是字符串,ios,iphone,objective-c,json,nsstring,Ios,Iphone,Objective C,Json,Nsstring,我有一个从不同的社交网络获取JSON格式的用户信息(名字、姓氏、城市) 这基本上运行得很好,但是其中一个社交网络将城市作为一个数字而不是字符串返回(实际上,我应该再打一次REST电话将这个数字映射到一个城市名称……但现在我只想显示这个数字) 当我尝试时,我得到了一个例外(这里): 所以我要说: 并尝试将其更改为: user.city = [NSString stringWithFormat:@"%d", dict[@"city"]]; 但是我得到了编译时警告(这里): 格式指定类型“int”

我有一个从不同的社交网络获取JSON格式的用户信息(名字、姓氏、城市)

这基本上运行得很好,但是其中一个社交网络将城市作为一个数字而不是字符串返回(实际上,我应该再打一次REST电话将这个数字映射到一个城市名称……但现在我只想显示这个数字)

当我尝试时,我得到了一个例外(这里):

所以我要说:

并尝试将其更改为:

user.city = [NSString stringWithFormat:@"%d", dict[@"city"]];
但是我得到了编译时警告(这里):

格式指定类型“int”,但参数的类型为“id”


所以我的问题是如何干净地解决这个问题(没有Xcode警告)和健壮性(当获取的JSON数据恰好是字符串时)?

最快的解决方案是:

[NSString stringWithFormat:@"%@", dict[@"city"]];
它将获取字符串或数字的描述并将其转换为字符串

将来,您可能希望使用:

if ([1dict[@"city"] isKindOfClass:[NSNumber class]]) { ...

检查您收到的内容,并具体使用。i、 e.当您实际上已经有一个字符串时(因为效率低),执行查找并不使用
stringWithFormat:

最快的解决方案是:

[NSString stringWithFormat:@"%@", dict[@"city"]];
它将获取字符串或数字的描述并将其转换为字符串

将来,您可能希望使用:

if ([1dict[@"city"] isKindOfClass:[NSNumber class]]) { ...

检查您收到的内容,并具体使用。i、 e.当您实际上已经有一个字符串时(因为效率低),执行查找并不使用
stringWithFormat:

最快的解决方案是:

[NSString stringWithFormat:@"%@", dict[@"city"]];
它将获取字符串或数字的描述并将其转换为字符串

将来,您可能希望使用:

if ([1dict[@"city"] isKindOfClass:[NSNumber class]]) { ...

检查您收到的内容,并具体使用。i、 e.当您实际上已经有一个字符串时(因为效率低),执行查找并不使用
stringWithFormat:

最快的解决方案是:

[NSString stringWithFormat:@"%@", dict[@"city"]];
它将获取字符串或数字的描述并将其转换为字符串

将来,您可能希望使用:

if ([1dict[@"city"] isKindOfClass:[NSNumber class]]) { ...

检查您收到的内容,并具体使用。i、 e.当您实际上已经有一个字符串时(因为它效率很低),执行查找并不使用
stringWithFormat:

谢谢,这很有意义!我唯一不明白的是:在我的原始代码中,在解析JSON之后,我给
user.city
(即用户对象的NSString属性)分配了一个数字-为什么我没有收到任何警告/崩溃?我只是在以后尝试在
UILabel
中显示user.city时才得到它们,因为从字典中出来的对象是
id
类型,所以编译器很乐意在运行时进行检查。赋值实际上并没有检查任何东西,因为您并没有真正使用实例,只是传递了一个指针。第一次尝试使用与标签相关的实例时,会查找要使用的方法,发现该方法在
NSNumber
类中不存在,然后崩溃……例如,这是如何工作的:如果我怀疑某个对象可能是NSNumber或NSString,我会编写NSNumber*asNumber=dict[@“city”];如果([asNumber isKindOfClass:[NSNumber class]]){…使用NSNumber方法}或者{NSString*asString=dict[@“城市”];…使用NSString方法}谢谢,这很有意义!我唯一不明白的是:在我的原始代码中,在解析JSON之后,我给
user.city
(即用户对象的NSString属性)分配了一个数字-为什么我没有收到任何警告/崩溃?我只是在以后尝试在
UILabel
中显示user.city时才得到它们,因为从字典中出来的对象是
id
类型,所以编译器很乐意在运行时进行检查。赋值实际上并没有检查任何东西,因为您并没有真正使用实例,只是传递了一个指针。第一次尝试使用与标签相关的实例时,会查找要使用的方法,发现该方法在
NSNumber
类中不存在,然后崩溃……例如,这是如何工作的:如果我怀疑某个对象可能是NSNumber或NSString,我会编写NSNumber*asNumber=dict[@“city”];如果([asNumber isKindOfClass:[NSNumber class]]){…使用NSNumber方法}或者{NSString*asString=dict[@“城市”];…使用NSString方法}谢谢,这很有意义!我唯一不明白的是:在我的原始代码中,在解析JSON之后,我给
user.city
(即用户对象的NSString属性)分配了一个数字-为什么我没有收到任何警告/崩溃?我只是在以后尝试在
UILabel
中显示user.city时才得到它们,因为从字典中出来的对象是
id
类型,所以编译器很乐意在运行时进行检查。赋值实际上并没有检查任何东西,因为您并没有真正使用实例,只是传递了一个指针。第一次尝试使用与标签相关的实例时,会查找要使用的方法,发现该方法在
NSNumber
类中不存在,然后崩溃……例如,这是如何工作的:如果我怀疑某个对象可能是NSNumber或NSString,我会编写NSNumber*asNumber=dict[@“city”];如果([asNumber isKindOfClass:[NSNumber class]]){…使用NSNumber方法}或者{NSString*asString=dict[@“城市”];…使用NSString方法}谢谢,这很有意义!我唯一不明白的是:在我的原始代码中,在解析JSON之后,我给
user.city
(即用户对象的NSString属性)分配了一个数字-为什么我没有收到任何警告/崩溃?我只是在以后尝试在
UILabel
中显示user.city时才得到它们,因为从字典中出来的对象是
id
类型,所以编译器很乐意在运行时进行检查。作业实际上并没有检查任何东西,因为你们并没有真正使用th