关于 iphone:Filter NSDictionary using DidSelectRow selection as key/filter object

Filter NSDictionary using DidSelectRow selection as key/filter object

我在两个可变数组中解析并存储了一个XML,它们是albumArray 和trackArray。我使用这两个数组创建了一个字典,如下所示,

1
 trackANDAlbum = [NSMutableDictionary dictionaryWithObjects:trackArray forKeys:albumArray];

所以我的字典看起来像这样:

1
2
3
 album1 = song1
 album1 = song2
 album1 = song3 etc.

由于albumArray 包含重复项,我使用NSSet 消除了它,并将这个名为"eliminateDupe" 的新数组作为UITableView 的数据源。

我面临的问题是,当用户在 TableView 中选择特定专辑名称时,所选专辑的相应歌曲必须显示在另一个视图中。

那么是否可以识别在 TableView 的 DidSelectRow 中选择的专辑名称,并将其作为字典 trackANDAlbum 的键,并检索相应的歌曲并将其显示在 tableview 中。

例如,如果选择的专辑是"album1",那么在下一个tableview中必须列出album1对应的歌曲,即song1,song2,song3。实现这个概念的任何可能性,否则我有一些更好的方法?


如果您使用albumArray 来填充您的tableview,而不是使用此代码,您可以通过tableview 中的行获取专辑名称。

1
2
3
4
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
         NSString * albumName = [albumArray objectAtIndex:indexPath.row];
        }

你可以使用这个albumName变量作为键来从你的字典中查找歌曲名称,如果你使用另一个数组然后改变数组名,是的,如果你想在这个方法之外使用albumName变量而不是让它的属性在.h 文件。

更新

使用我们的 albumName 变量从字典中检索数据

1
2
3
4
if([yourDictionary objectForKey:albumName]!=nil)
   {              
     NSString * songName = [yourDictionary objectForKey:albumName];
   }

您可以使用此代码检索数据,是的,正如我所说,要在另一种方法中使用专辑名称,您必须在 .h 文件中创建其属性并在 .m 文件中合成它。

编辑

在您的情况下,单个专辑名称有多个歌曲名称,因此您的代码将是这样的。

1
2
3
4
5
if([yourDictionary objectForKey: albumName]!=nil)
       {    
          NSArray * newSongAry;
         [newSongAry addObject:[yourDictionary objectForKey:albumName]];
       }