解析 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)时内存泄漏