我的应用程序搜索数据库并通过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;
}
答案 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.
}