Ios UISearch栏:发送到实例的选择器无法识别

Ios UISearch栏:发送到实例的选择器无法识别,ios,uisearchbar,Ios,Uisearchbar,我在表视图中有一些数据,这些数据是从web服务获得的。我有一个自定义类(SaveContactView),它根据计数可变数组计数调用表单元格。即使我在下面的代码中得到了错误 - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { if(searchText.length == 0) { isFiltered = NO; } else

我在表视图中有一些数据,这些数据是从web服务获得的。我有一个自定义类(SaveContactView),它根据计数可变数组计数调用表单元格。即使我在下面的代码中得到了错误

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    if(searchText.length == 0)
    {
        isFiltered = NO;
    }
    else
    {
        NSLog(@"Mutable array == %@", mutableArray); // get only addresses of SaveContactView here.
        isFiltered = YES;
        filterdArray = [[NSMutableArray alloc] init];
        for (NSString *name in mutableArray)
        {
            NSRange nameRange = [name rangeOfString:searchText options:NSCaseInsensitiveSearch]; // error 
            if(nameRange.location != NSNotFound)
            {
                [filterdArray addObject:name];
            }
        }
    }
    [self.tableViewContact reloadData];
}
我认为问题出在
cellforrowatinexpath
方法的某个地方

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellId = @"SaveContactCell";
    ContactTableCell *cell = (ContactTableCell *)[self.tableViewContact dequeueReusableCellWithIdentifier:cellId];

    if(!cell)
    {
        NSArray *nib
        if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
        {
             nib = [[NSBundle mainBundle] loadNibNamed:@"ContactTableCell" owner:self options:nil];
        }
        else
        { 
             nib = [[NSBundle mainBundle] loadNibNamed:@"ContactTableCell_iPad" owner:self options:nil];
        }
            for (id object in nib)
            {
                if([object isKindOfClass:[ContactTableCell class]])
                {
                    cell = (ContactTableCell *)object;
                    break;
                }
            }

            cell = [nib objectAtIndex:0];



        /*
        if(isFiltered == YES)
        {
            cell.textLabel.text = [filterdArray objectAtIndex:indexPath.row];
        }
        else
        {
            cell.textLabel.text = [mutableArray objectAtIndex:indexPath.row];
        }*/

        SaveContactView *saveContact;
        if(isFiltered == YES)
        {
            saveContact = [filterdArray objectAtIndex:indexPath.row];
        }
        else
        {
            saveContact = [mutableArray objectAtIndex:indexPath.row];
        }

        cell.name.text = saveContact.name;
        cell.companyLabel.text = saveContact.company;


    }
    return cell;
}
isFiltered是布尔值。mutableArray拥有所有数据。FilterDarray已搜索数据。 可变数组的日志为

Mutable array === (
    "<SaveContactView: 0x15d79a50>",
    "<SaveContactView: 0x15d2c920>",
    "<SaveContactView: 0x15d4a9e0>",
    "<SaveContactView: 0x15d50360>",
    "<SaveContactView: 0x15d1cf00>",
    "<SaveContactView: 0x15d20c30>"
)
可变数组===(
"",
"",
"",
"",
"",
""
)

在下一行 for(可变数组中的NSString*名称)

mutableArray中的元素似乎是SaveContactView类型。您应该执行以下操作:

for (SaveContactView *saveContactView in mutableArray){
     NSString *name = saveContactView.name
........

你在过滤错误的对象。在阵列中,您正在放置SaveContactView对象,但您希望过滤它们的名称

for (SaveContactView *contact in mutableArray)
        {
            NSRange nameRange = [contact.name rangeOfString:searchText options:NSCaseInsensitiveSearch]; // error 
            if(nameRange.location != NSNotFound)
            {
                [filterdArray addObject:contact]; // add contact, not string
            }
        }

根据控制台日志,您发送的未识别选择器是什么?记录您的
mutableArray
i上载了日志图像