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