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

Ios 多个NSMutableArray,一个按谓词排序,另一个相对重新排序,ios,objective-c,arrays,cocoa-touch,nsarray,Ios,Objective C,Arrays,Cocoa Touch,Nsarray,我正在开发一个音乐应用程序,在管理TableView的同时,我将它们分为多个部分。这通常是一个简单的过程,但以我管理数据的方式,这可能不是一个完全简单的任务 我知道这不是最好的方法,但由于单元格有多个属性(titleLabel、textLabel、imageView),我将所有数据存储在3个单独的数组中。在按标题组织歌曲时,对于小节标题,我使用谓词设置标题标签,因此使用以下代码 NSArray *predict = [mainArrayAll filteredArrayUsingPredicat

我正在开发一个音乐应用程序,在管理TableView的同时,我将它们分为多个部分。这通常是一个简单的过程,但以我管理数据的方式,这可能不是一个完全简单的任务

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

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

不幸的是,我还有一个其他的名字,还有其他的。这些都有数据,如艺术家姓名,专辑的艺术作品,所以需要相对于他们的歌曲。有没有办法像mainArrayAll数组那样对这些其他数组重新排序?因此,相关数据保存在一起?

在上述情况下,我建议您创建一个模型类实现来存储所有值。下面是这里最好的方法

例如:-

@interface Music : NSObject {}

@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *artistName;
@property (nonatomic, strong) NSString *albumName; 
//etc...

@end
现在,如果要创建一组音乐,请按以下步骤进行:

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];

我会支持你的答案,但是我决定使用更简单的选项来存储MPMediaItems数组,而不是获取它们属性的数组。无论如何谢谢你!是的,这是一个类似的方法。我建议使用一个自定义模型类,而不是
MPMediaItems
,以便您可以在其中添加任何附加属性。但是其余的谓词和排序将保持不变。嘿,之后对大量问题进行了排序,但最终屈从于使用自定义模型类,而且效果非常好。谢谢