Завершение работы приложения из-за невыполненного исключения «NSInvalidArgumentException», причина: '- [NSCFString nric]: - PullRequest
0 голосов
/ 15 июня 2011

Я получаю эту ошибку, когда играю с панелью поиска, которую я только что реализовал. Некоторые буквы работают, а другие вылетают с ошибкой в ​​заголовке. Кажется, ошибка здесь, но я не могу понять, что с ней не так: "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 ]

1 голос
/ 15 июня 2011

Один из массивов, который, по вашему мнению, содержит только PatientInfo объектов, на самом деле содержит строку NSString. Поэтому, когда вы пишете info.nric, он запрашивает NSString для его свойства nric, которого, конечно, не существует. Фактическая ошибка будет в том случае, если вы ошибочно помещаете строку в массив (либо copyListOfItems, либо listOfItems).

0 голосов
/ 15 июня 2011

Замените на следующий код, вы будете знать, что именно не так в вашем коде:

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