解析 JSON 后将文本分配给 UILabel 会出错

Posted

技术标签:

【中文标题】解析 JSON 后将文本分配给 UILabel 会出错【英文标题】:Assigning text to UILabel gives error after parsing JSON 【发布时间】:2017-05-24 15:28:34 【问题描述】:

我有以下代码用于接收来自 JSON 格式的 php Web 服务的响应:

-(void)connectionDidFinishLoading:(NSURLConnection *)connection

    NSString *responseStringWithEncoded = [[NSString alloc] initWithData: mutableData encoding:NSUTF8StringEncoding];
    NSLog(@"Response from Server : %@", responseStringWithEncoded);
    [self getData:responseStringWithEncoded];


-(void) getData:(NSString *) responseStringWithEncoded
    NSData *data = [responseStringWithEncoded dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSLog(@"object for key ime = %@", [json objectForKey:@"imei"]);
    NSString * jimei = [json objectForKey:@"imei"];
    NSLog(@"jimei = %@", jimei);

    //  NSDictionary * jimei = [json objectForKey:@"imei"];
   imeiLable.text = jimei;

我在模拟器中成功检索数据,但是当将接收到的字符串(NSDictionary)中的一个值分配给imeiLable.text 时,出现以下错误。

这是输出:

请求数据 = URL:http://localhost/getjsonimei.php?imei=478593219801234

来自服务器的响应:"id":7,"imei":478593219801234,"mname":"Samsung Glaxy","pamount":"2000 卢比","pname":"Faizi","address": "88 号楼 31 号楼","cnumber":11122233,"nic":"87456893"

关键 ime 的对象 = 478593219801234

集美=478593219801234

这里是模拟器结果字符串(字典)和错误的详细描述。

2017-05-24 20:01:13.229 imiechecker[4005:61372]-[__NSCFNumber 长度]:无法识别的选择器发送到实例 0xb01b3472adbb0923 2017-05-24 20:01:13.263 imiechecker[4005:61372] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFNumber 长度]:无法识别的选择器发送到实例 0xb01b3472adbb0923”

我也尝试了以下方法:

NSDictionary * jimei = [json objectForKey:@"imei"];

但有同样的错误。

请指出我哪里做错了?

【问题讨论】:

[json objectForKey:@"imei"]NSNumber,而不是 NSString。所以为了工作:NSString * jimei = [[json objectForKey:@"imei"] stringValue]; 好,它有效,非常酷......谢谢@Lame @Maddy,我不知道你为什么对我的问题做了这么多的修改,为了获得一些声誉你打错了很多东西,这在编程中没有任何意义,就像`self getData: responseStringWithEncoded]; ` 这行之前写成 ` [self getData:responseStringWithEncoded]; ` 尽管您的节制总体上出现了编程概念错误,但实际上我是该网站的新手,对其纯粹的规则和规定一无所知,否则我也曾经报告过您的编辑技巧。所以请自行删除您的编辑。因为在你编辑之前我已经得到了一个很好的答案。 实际上,我认为 rmaddy 的编辑在很大程度上对问题的格式进行了很大改进。当然,他引入了一个小错误,但它比你所拥有的更容易阅读。我为你插入了[ 【参考方案1】:

您的 IMEI 号码的数据类型为 NSNumber,而不是 NSString

试试这个:

  NSString * jimei = [NSString stringWithFormat:@"%@", [json objectForKey:@"imei"]];

    imeiLable.text = jimei;

【讨论】:

以上是关于解析 JSON 后将文本分配给 UILabel 会出错的主要内容,如果未能解决你的问题,请参考以下文章

将文本分配给UILabel(iOS,Swift 4,Xcode 9)时内存泄漏

在 UIView 中显示 UILabel 的属性文本

UITableview 单元格内的 UILabel,自动布局填充问题

如何在javascript中将文本分配给标签?

Swift将文本分配给xib文件中的标签

根据 JSON 文件中的内容文本调整带有 UILabel 的自定义单元格的大小