由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [NSCFString nric]:

时间:2011-06-15 02:09:23

标签: iphone objective-c uisearchbar

当我使用我刚刚实现的搜索栏时,我收到此错误。有些字母有效,而其他字母会因标题中的错误而崩溃。错误似乎在这里,但我无法弄清楚它有什么问题:“cell.textLabel.text = info.nric;”。

有人请帮忙=(

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    // Set up the cell...

    if(searching){
        PatientInfo *info = [copyListOfItems objectAtIndex:indexPath.row];
        cell.textLabel.text = info.nric;
        cell.detailTextLabel.text = [NSString stringWithFormat:@"%i, %i", info.category, info.age];
    }
    else {

        //First get the dictionary object
        NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
        NSArray *array = [dictionary objectForKey:@"Patients"];
        PatientInfo *info = [array objectAtIndex:indexPath.row];
        // NSString *cellValue = [array objectAtIndex:indexPath.row];
        cell.textLabel.text = info.nric;
        cell.detailTextLabel.text = [NSString stringWithFormat:@"%i, %i", info.category, info.age];
    }

    return cell;
}

2 个答案:

答案 0 :(得分:1)

您认为只包含PatientInfo个对象的其中一个数组实际上包含一个NSString。因此,当您编写info.nric时,它会询问NSString的nric属性,当然不存在。实际错误将是您错误地将字符串放入数组中的任何位置(copyListOfItemslistOfItems)。

答案 1 :(得分:0)

替换为以下代码,您将知道代码中究竟出现了什么问题:

PatientInfo *info = [copyListOfItems objectAtIndex:indexPath.row];
if((nil != info) && ([info isKindOfClass:[PatientInfo class]))
{
    if([info respondsToSelector:@selector(nric)])
    {
        cell.textLabel.text = info.nric;
    }
}