【发布时间】:2017-05-31 10:48:25
【问题描述】:
好吧,如果我使用@tituloReceita 将其放在标签上,那么我正在尝试使用 Json 响应设置标签文本,但我必须使用 @ingredientes 如果你采取看这里http://blessing.com.br/aplicativos/receitasJson.php,可以看到@ingredientes比@tituloReceita大一点。
代码:
NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://blessing.com.br/aplicativos/receitasJson.php"]];
NSError *error=nil;
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
NSArray *json = dict[@"receitas"];
for (NSDictionary *dic in json) {
if ([dic[@"tituloReceita"] isEqualToString:titulo]) {
self.label1 = [[UILabel alloc] initWithFrame:CGRectMake(25, 50, 150, 20)];
//set the label text
self.label1.numberOfLines = 10;
self.label1.text = [dic objectForKey:@"ingredientes"];
//set the lable font
self.label1.font = [UIFont boldSystemFontOfSize:10.0f];
//se the text alignment
self.label1.textAlignment = NSTextAlignmentCenter;
[sView addSubview:self.label1];
}
}
在此之后,应用程序崩溃并记录以下内容:
*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFArray 长度]: 无法识别的选择器发送到实例 0x10c01ad90'
但如果我使用@tituloReceita 所说的另一个,它可以完美运行,这个应用程序就像一本食谱书。
【问题讨论】:
-
请仔细检查您的 JSON。
tituloReceita是一个字符串,ingredientes是一个数组。 -
[dic objectForKey:@"ingredientes"];它是一个数组而不是一个字符串 -
@SushilSharma 对不起我的错误我是 iOS 和 Objective-c 的新手
-
[__NSCFArray length]:unrecognized selector这意味着你调用的某个地方(可能不是直接调用你,而是一个“隐藏”调用)length对NSArray对象的方法(你不匹配对象的真实类并认为它可以调用length,但事实并非如此,因为它是一个NSArray对象)。通过实践,我们可以说在某处您将NSArray对象与NSString对象不匹配。精确定位应该给你self.label1.text = [dic objectForKey:@"ingredientes"];。所以[dic objectForKey:@"ingredientes"];是NSArray,而不是NSString,你的解析是错误的。
标签: ios objective-c iphone