2010-06-22 58 views
1

我有一个UITableView是根据来自可变数组的数据创建的。这是字典数组。因此,为了填充我的表,我不喜欢的东西iPhone - UITableView数据源?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

... 

NSDictionary *umObject = (NSDictionary*)[listaDeObjectos objectAtIndex:indexPath.row]; 
NSString *oneName = [umObject objectForKey:@"name"]; 

[cell setText:oneName]; 

... 

} 

这是工作正常,但现在我想实现在此表上的搜索。我看了其中的人使用这样的搜索方法教程...

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    [searchedData removeAllObjects];// remove all data that belongs to previous search 
    if([searchText isEqualToString:@""] || searchText==nil){ 
     [myTableView reloadData]; 
     searching = NO; 
     return; 
    } 

    searching = YES; 
    NSInteger counter = 0; 
    for(NSString *name in dataSource) 
    { 
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
     NSRange r = [name rangeOfString:searchText]; 
     if(r.location != NSNotFound) 
       [searchedData addObject:name]; 
     counter++; 
     [pool release]; 
    } 
    [myTableView reloadData]; 
} 

,你可以看到,他此行

for(NSString *name in dataSource) 

其中名称是从数据源中的条目(??)

这听起来像是从某种数组中填充表,但据我所知,我的表没有直接从数组填充,而是从我在代码的第一部分提取的值,逐个。

我不确定是否理解了数据源的概念。

我已阅读文档,但我仍然不理解。

这是什么数据源?我的桌子有一个吗?如果没有,我该如何搜索我的桌子?

礁你们帮忙吗?

感谢

回答

2

你的数据源是你的类,你有这一切UITableView相关的方法(tableView:cellForRowAtIndexPath:等)。该课程必须采用UITableViewDataSource协议。

当您为每个单元格提供数据时,将其从数组listaDeObjectos中提取出来。 当您搜索时,您只想提供阵列中的几个项目,这些项目必须采用您的搜索条件。

因此,当您不在“搜索模式”时,您必须提供数组(listaDeObjectos)中的数据。 当您处于“搜索模式”时,您应该提供单独数组中的数据,该数组必须仅包含采用您的搜索条件的特定项目。 UISearchBar调用searchBar:textDidChange:方法,您必须检查listaDeObjectos数组中的每个项目,如果此项目适用于由UISearchBar提供的搜索文本,请将此项目添加到该单独数组中。然后你调用reloadData方法,这会导致所有的表视图方法被调用。 因此,想法是如果您要搜索,则从“搜索阵列”提供数据,如果您不搜索,则从listaDeObjectos

+0

谢谢!!!!!!!!! – SpaceDog 2010-06-23 02:50:03

2

我不知道其他来源,但我认为他使用自己的数组作为数据。所以你应该做点像

for (NSDictionary *dict in listaDeObjectos) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
    NSString *oneName = [dict objectForKey:@"name"]; 

    NSRange r = [name rangeOfString:searchText]; 
    if(r.location != NSNotFound) 
     [searchedData addObject:name]; 
    counter++; 
    [pool release]; 
} 

改为。

+0

谢谢!您的信息补充了beefon(+1)! – SpaceDog 2010-06-23 02:50:56