多NSMutableArrays,一个谓语排序,其他人相对重新排序(Multiple NSMutab

2019-10-17 19:38发布

我有一个音乐应用程序,我发展,虽然我管理TableViews,我为他们整理成部分。 这通常是一个简单的过程,但与我管理我管理数据的方式,它可能不是一个完全简单的任务。

我知道这是不是这样做的最佳方式,但随着电池具有多个属性(titleLabel,为textLabel,ImageView的),我保存在3个独立的阵列中的所有数据。 当标题举办的歌曲,为节头,我使用谓词通过使用此代码来设置titleLabel,所以。

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

不幸的是,我也有一个otherArrayAll,等等。 这些都如歌手名,专辑封面数据并因此需要相对于他们的歌曲。 有没有一种方式,以同样的方式mainArrayAll阵列是重新安排这些其他阵列? 所以相对的数据被保存起来呢?

Answer 1:

在上述情况下,我会建议你创建一个模型类的实现来存储所有的值。 继MVC架构是这里的最佳方式。

对于如: -

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


文章来源: Multiple NSMutableArrays, one sorted by Predicate, others reordered relatively