当仅返回单个JSON结果时,iOS应用程序崩溃

时间:2014-05-30 05:36:40

标签: ios objective-c

我的应用程序搜索数据库并通过JSON返回结果并将其显示在UITableView中。大部分时间一切正常,但是当搜索返回单个结果时我的应用程序崩溃了。它可以处理0或2-100,但当它变为1时,繁荣,崩溃。

以下是它吐出的错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to 
instance 0x8d84680

并提出这行代码:

NSDictionary *tempDictionary = [[UserInfo sharedUserInfo].userSearchArray objectAtIndex:indexPath.row];

以下是该方法其余部分的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *cellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    NSDictionary *tempDictionary = [[userInfo sharedUserInfo].userSearchArray objectAtIndex:indexPath.row];

    if (cell==nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
    }

    if (tableView == self.searchDisplayController.searchResultsTableView) {
        cell.textLabel.text = [tempDictionary objectForKey:@"title"];
        cell.detailTextLabel.text = [tempDictionary objectForKey:@"system_title"];
    }
    else {

    UILabel *TitleLable = (UILabel*)[cell viewWithTag:1];
    TitleLable.text = [tempDictionary objectForKey:@"title"];


    UILabel *systemTitleLable = (UILabel *)[cell viewWithTag:2];
    systemTitleLable.text = [tempDictionary objectForKey:@"system_title"];

    }
return cell;
}

1 个答案:

答案 0 :(得分:2)

你是userSearchArray是NSDictionary的一个实例。如果JSON字符串中只有一个“对象”,则会发生这种情况。如果有多个JSON反序列化器将“对象”放入数组中,就像您期望的那样。您所要做的就是检查以下结果:

[[userInfo sharedUserInfo].userSearchArray
像这样:

if([[[userInfo sharedUserInfo].userSearchArray isKindOfClass:[NSDictionary class]]) {
    //work directly with the dictionary
} else {
    //work with the array.
}