尝试获取标签以显示从某些JSON中提取的数据......
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSError *myError = nil;
NSDictionary *res = [NSJSONSerialization JSONObjectWithData:jsonresponse options:NSJSONReadingMutableLeaves error:&myError];
NSArray *results = [res objectForKey:@"current_observation"];
NSArray *cur = [results valueForKey:@"weather"];
NSArray *tmp = [results valueForKey:@"temp_f"];
NSString * tmpstring = [[tmp valueForKey:@"description"] componentsJoinedByString:@""];
temp.text = tmpstring;
}
当它运行该代码时,它会吐出来......
2013-01-31 15:38:03.319 Places[4659:907] -[__NSCFString componentsJoinedByString:]: unrecognized selector sent to instance 0x5680d0
2013-01-31 15:38:03.321 Places[4659:907] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString componentsJoinedByString:]: unrecognized selector sent to instance 0x5680d0'
*** First throw call stack:
(0x32b3e3e7 0x3a82f963 0x32b41f31 0x32b4064d 0x32a98208 0x413b 0x3347a915 0x333ba769 0x333ba685 0x3281b64f 0x3281ad33 0x32843013 0x32a84acd 0x32843473 0x327a7461 0x32b138f7 0x32b1315d 0x32b11f2f 0x32a8523d 0x32a850c9 0x3666333b 0x349a12b9 0x20c9 0x2050)
libc++abi.dylib: terminate called throwing an exception
(lldb)
有什么想法吗?
答案 0 :(得分:2)
-description
是从NSObject继承的方法,是NSObject协议的一部分;它返回一个NSString *
,其中包含对象的一些描述。所有类都可以覆盖它以返回任意NSString。
-valueForKey:
将返回一个数组,其中包含在其所有对象上调用-description
方法的结果。这似乎不是这种情况,因为[tmp valueForKey:@"description"]
似乎返回NSString *
而不是数组。我猜tmp
不是数组,因此你的应用程序崩溃了。
在不知道JSON数据究竟是什么的情况下,不可能说出这里出了什么问题。请使用一些示例数据更新您的问题。
答案 1 :(得分:0)
description 为从NSObject继承的所有对象返回NSString。 NSString及其祖先都没有实现 componentsJoinedByString 。 如果要使用 componentsJoinedByString ,则需要将其直接发送到实现该方法的NSArray或其他集合对象。 使用Objective-C中的嵌套消息传递,您需要确定返回的对象类是什么。如果您不确定,请删除您的消息,这样您就会看到它是什么。 如果在某些情况下无法确定,最好不要使用某些方法(例如
)来删除消息并进行验证if ([object respondsToSelector:@selector(someSelector:)]) {
// do stuff here
} else {
// some alternative
}