2014-12-04 83 views
0

搜索我有兩個數組:的iOS在一個陣列,通過匹配指數從另一

NSMutableArray *moviesArray; 
NSMutableArray *directorsArray; 
moviesArray = [@"movie01",@"movie02",@"movie03",@"movie04"]; 
directorsArray = [@"director01",@"director02",@"director03",@"director04"]; 

我在表中顯示該視圖。每個單元都有一個標題標籤和一個導演標籤。

cell.titleLabel.text = [moviesArray objectAtIndex:indexPath.row]; 
cell.directorLabel.text = [directorsarray objectatIndex:indexPath.row]; 

我使用一個搜索欄來搜索電影標題,所以我做的:

//Search Filter Code 
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope { 
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", searchText]; 
    searchResults = [moviesArray filteredArrayUsingPredicate:resultPredicate]; 
    NSLog(@"Search Results: %@", searchResults); 
} 

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { 
[self filterContentForSearchText:searchString 
          scope:[[self.searchDisplayController.searchBar scopeButtonTitles] 
            objectAtIndex:[self.searchDisplayController.searchBar 
               selectedScopeButtonIndex]]]; 

return YES; 
} 

然後在我的手機:

if (tableView == self.searchDisplayController.searchResultsTableView) { 
    cell.pdmTitle.text = [searchResults objectAtIndex:indexPath.row]; 
[...] } 

所有這一切工作。我的問題是,每部電影都有一個相應的導演陣容。 我該怎麼做才能顯示我單元格中的配對導演?

含義,如果我搜索電影03,titleLabel.text應該是movie03,directorLabel.text應該是director03。

非常感謝您的幫助!

+1

我會我不推薦這種方法適合你的情況。你應該選擇一個自定義模型類,你可以有兩個屬性來存儲電影名稱和導演名稱。然後在搜索過程中,您可以使用電影名稱進行過濾,並且可以直接從相同模型對象填充導演名稱,而無需擔心其他陣列中的正確索引。 – Gandalf 2014-12-04 11:55:25

+0

我知道,但是我只是想了解一些關於陣列和一些情況的不同方法。事實上,自定義模型類將是最好的選擇。 非常感謝甘道夫。 – PabloM 2014-12-04 22:38:49

回答

0
NSString *correspondingDirector = [directorsArray objectAtIndex: [moviesArray indexOfObject:@"Movie you are searching"]]; 
+0

在這種情況下,indexOfObject就是我正在尋找的那種解決方案。非常感謝,它幫助了很多! – PabloM 2014-12-04 22:41:34

0

根據你的代碼添加此:

if (tableView == self.searchDisplayController.searchResultsTableView) { 
cell.pdmTitle.text = [searchResults objectAtIndex:indexPath.row]; 
// line to add: 
NSString *director = [directorsArray objectAtIndex:[moviesArray indexOfObject:cell.pdmTitle.text]]; 
[...] } 
3

您是否使用單一NSDictionary,而不是使用兩個NSArrays考慮?

例如:如果你想存儲有關每部電影,更多信息的話,最好

[movies objectForKey:@"movie1"]; 

NSDictionary *[email protected]{@"movie1":@"director1",@"movie2":@"director2"}; 

這樣你就可以通過簡單地做總是知道一部電影的導演方法是使用dictionariesarray,例如:

NSDictionary *[email protected]{@"MovieName":@"Norbit",@"Director":@"Eddie Murphy",@"Language":@"English"}; 
NSArray *[email protected][movie]; 
+0

是的,我認爲是一個字典,但如果我後來想添加另一個字段,比如演員,字典就不是最好的選擇。 – PabloM 2014-12-04 22:40:35

+0

你絕對可以在「電影」字典中添加一組演員。但是,是的,最好的選擇是使用自定義模型類。 – Varoon 2014-12-05 04:20:06

相關問題