2010-06-22 74 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