搜索表视图时出现问题

时间:2010-08-19 15:10:47

标签: iphone

我在表视图中实现搜索功能时遇到问题...这是我正在实现搜索的代码......

- (void) searchTableView {

NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] init];

searchArray = [data boats];

for(Boat *boat in searchArray)
{
    NSRange titleResultsRange = [[boat boatName] rangeOfString:searchText options:NSCaseInsensitiveSearch];

    if (titleResultsRange.length > 0)
        [copyListOfItems addObject:boat];
}

[searchArray release];
searchArray = nil;

}

当搜索栏开始编辑时,我称之为......

- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText {

//Remove all objects first.
[copyListOfItems removeAllObjects];

if([searchText length] > 0) {

    [ovController.view removeFromSuperview];
    searching = YES;
    letUserSelectRow = YES;
    self.tableView.scrollEnabled = YES;
    [self searchTableView];
}
else {

    [self.tableView insertSubview:ovController.view aboveSubview:self.parentViewController.view];

    searching = NO;
    letUserSelectRow = NO;
    self.tableView.scrollEnabled = NO;
}

[self.tableView reloadData];

}

并使用...

将值分配给表格行
if(searching)
{
    Boat *copyboat = [copyListOfItems objectAtIndex:[indexPath row]];
    cell.textLabel.text = [copyboat boatName];
    NSLog(@"%@", [copyboat boatName]);
}
else {
    Boat *fullboat =[data.boats objectAtIndex:[indexPath row]];
    cell.textLabel.text =[fullboat boatName];       
}

但是当我开始在搜索栏中输入值时,应用程序崩溃了。当我键入不同的字母表时,我会遇到不同的错误。我得到的错误就像。 *由于未捕获的异常'NSRangeException'而终止应用程序,原因:'* - [NSMutableArray objectAtIndex:]:索引6超出边界[0 .. 5]'

*由于未捕获的异常'NSRangeException'而终止应用程序,原因:'* - [NSMutableArray objectAtIndex:]:索引0超出空数组的界限'

有时候它也显示EXEC_BAD_ACCESS ...我现在搞砸了。任何人都可以告诉我错误究竟是什么...... ???

1 个答案:

答案 0 :(得分:0)

创建船名称子集时,是否更改了numberOfRowsInSection中返回值的值?看起来表正在重新加载并尝试查找7行数据,但现在只有6个数据。类似的东西:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
if (searching) {
    return [copyListOfItems count];
} else {
    return [data count];
}

}