1

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

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

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

不幸的是,我还有一个 otherArrayAll 等。这些都有艺术家姓名、专辑封面等数据,因此需要与他们所使用的歌曲相关。有没有办法以与 mainArrayAll 数组相同的方式重新排序这些其他数组?那么相关数据是保存在一起的吗?

4

1 回答 1

3

在上述情况下,我建议您创建一个模型类实现来存储所有值。遵循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];
于 2013-03-08T23:19:09.357 回答