UISearchbar:发送到实例的无法识别的选择器

时间:2013-12-04 13:49:58

标签: ios uisearchbar

我在表格视图中有一些数据来自Web服务。我有一个自定义类(SaveContactView),它根据count可变数组计数调用表单元格。即使我在以下代码中收到错误,

- (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];
}

我认为问题出现在cellForRowAtIndexPath方法中。

- (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是BOOL值。 mutableArray拥有所有数据。 filteredArray已搜索数据。 log for mutableArray是

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

enter image description here

2 个答案:

答案 0 :(得分:2)

您正在过滤错误的对象。在你的数组中,你放置了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
            }
        }

答案 1 :(得分:0)

在以下行中        for(NSString * name in mutableArray)

mutableArray中的元素似乎是SaveContactView类型。你应该做以下的事情:

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