【发布时间】:2016-06-22 06:22:41
【问题描述】:
我是 JSon 的新手,所以请耐心等待。我正在从 URL 反序列化 JSon,一切都很好,直到我尝试分离其中的对象。应用程序崩溃,我收到一个我不明白的错误。也许你可以帮我看看我错过了什么。
[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
if ([data length]>0 && error == nil) {
id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
if (jsonObject != nil && error == nil) {
if ([jsonObject isKindOfClass:[NSDictionary class]]) {
NSDictionary *deserializedDictionary = [[NSDictionary alloc] init];
deserializedDictionary = jsonObject;
NSLog(@"Deserialized Dictionary = %@",deserializedDictionary);
/*
LOG: Deserialized Dictionary = { d = "[{\"unit\":\"P101\",\"price\":36.0000,\"stat\":\"process\",\"type\":\"P12\"},{\"unit\":\"P102\",\"price\":38.0000,\"stat\":\"process\",\"type\":\"P13\"},..}
*/
NSMutableArray *dicts = [[NSMutableArray alloc] init];
dicts = (NSMutableArray *)deserializedDictionary[@"d"];
NSLog(@"Print dicts: %@",dicts);
/*
LOG: Print dicts: [{"unit":"P101","price":36.0000,"stat":"process","type":"P12"},{"unit":"P102","price":38.0000,"stat":"process","type":"P13"},..]
*/
NSLog(@"%@",NSStringFromClass([dicts class]));
//LOG: __NSCFString
NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init];
for (myDict in dicts)
{
NSLog(@"myDict objectForKey: id-> %@ myDict objectForKey: result-> %@",[myDict objectForKey:@"unit"],[myDict objectForKey:@"result"]);
}
}
然后我得到这个错误:
[__NSCFString countByEnumeratingWithState:objects:count:]:无法识别的选择器发送到实例 0x7fe97b327790 2016-03-08 11:29:12.946 Poop[49680:5673839] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFString countByEnumeratingWithState:objects:count:]:无法识别的选择器发送到实例 0x7fe97b327790”
请帮忙?
【问题讨论】:
-
某处,您说您的对象是
NSDictionary的NSArray(不确定是哪一个),实际上它是NSString,这会导致“无法识别的选择器发送到实例”。似乎dicts类是NSString而不是NSMutableArray。还有一些 alloc/init 完全错误... -
它到底在哪里崩溃,在哪一行?还要更改这一行 - dicts = (NSMutableArray *)deserializedDictionary[@"d"]; to dicts = deserializedDictionary[@"d"];
-
请发布您的示例数组,以便我可以根据其结构检查您的代码
-
@BharatModi 尝试输入
for时崩溃。马上改,谢谢! @PradheepNarendranP 原始数组看起来像我的代码中的第一个 LOG,但它太长无法发布,这就是为什么我只显示前 2 个单元。 -
这段代码有很多问题......你应该考虑从小得多的东西开始。
标签: ios objective-c json nsjsonserialization