2014-12-04 72 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