多个NSMutableArrays,一个按谓词排序,另一个相对重新排序

我有一个我正在开发的音乐应用程序,当我管理TableViews时,我将它们分类为Sections。 这通常是一个简单的过程,但按照我管理的方式管理数据,这可能不是一个完全简单的任务。

我知道这不是最好的方法,但由于单元格有多个属性(titleLabel,textLabel,imageView),我将所有数据存储在3个独立的数组中。 按标题组织歌曲时,对于节标题,我使用谓词设置titleLabel,因此使用此代码。

NSArray *predict = [mainArrayAll filteredArrayUsingPredicate:predicate]; cell.titleLabel.text = [predict objectAtIndex:indexPath.row]; 

不幸的是,我还有其他的Array和其他人。 这些都有艺术家姓名,专辑插图等数据,因此需要与他们的歌曲相关。 有没有办法以与mainArrayAll数组相同的方式重新排序这些其他数组? 那么相关数据是否保持在一起?

在上面的例子中,我建议你创建一个模型类实现来存储所有的值。 遵循MVC架构是这里的最佳方式。

例如: –

 @interface Music : NSObject {} @property (nonatomic, strong) NSString *title; @property (nonatomic, strong) NSString *artistName; @property (nonatomic, strong) NSString *albumName; //etc... @end 

现在,如果要创建音乐arrays,请执行以下操作:

 Music *myMusic1 = [[Music alloc] init]; myMusic1.title = @"name"; myMusic1.artistName = @"artist";//etc.. do this in a loop based on other contents array NSMutableArray *array = [NSMutableArray arrayWithObjects:myMusic1, myMusic2, ... nil]; 

现在要排序这个数组:

 NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { return [a.title compare:b.title]; }]; 

如果要使用谓词:

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K contains %@", @"title", @"name"]; NSArray *predict = [mainArrayAll filteredArrayUsingPredicate:predicate]; 

如果要在表视图中使用这些属性,可以将其用作:

 NSString *title = [[sortedArray objectAtIndex:indexPath.row] title]; NSString *artistName = [[sortedArray objectAtIndex:indexPath.row] artistName];