我在表格视图中有一些数据来自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>"
)
答案 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
........