2013-12-04 6 views
0

У меня есть некоторые данные в виде таблицы, которые я получаю из веб-службы. У меня есть пользовательский класс (SaveContactView), который вызывает ячейку таблицы в зависимости от счетчика countable array count. Даже если я получаю сообщение об ошибке в следующем коде,Панель UISearch: непризнанный селектор, отправленный в экземпляр

- (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 есть все данные. filterArray выполнил поиск данных. Вход для mutableArray является

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

enter image description here

+1

Показать свой nslog. –

+0

Что такое непризнанный селектор, который вы отправляете, в соответствии с журналами консоли? –

+0

log your 'mutableArray' –

ответ

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 
      } 
     } 
0

На следующей строке для (NSString * имя в mutableArray)

Элементы mutableArray, кажется, типа SaveContactView. Вы должны сделать что-то вроде:

for (SaveContactView *saveContactView in mutableArray){ 
    NSString *name = saveContactView.name 
........ 
Смежные вопросы