我正在开发一个音乐应用程序,当我管理TableView时,我将它们分类为Sections。这通常是一个简单的过程,但按照我管理的方式管理数据,这可能不是一个完全简单的任务。
我知道这不是最好的方法,但由于单元格有多个属性(titleLabel,textLabel,imageView),我将所有数据存储在3个独立的数组中。按标题组织歌曲时,对于节标题,我使用谓词设置titleLabel,因此使用此代码。
NSArray *predict = [mainArrayAll filteredArrayUsingPredicate:predicate];
cell.titleLabel.text = [predict objectAtIndex:indexPath.row];
不幸的是,我还有其他的Array和其他人。这些都有艺术家姓名,专辑插图等数据,因此需要与他们的歌曲相关。有没有办法以与mainArrayAll数组相同的方式重新排序这些其他数组?那么相关数据是保持在一起的吗?
答案 0 :(得分:3)
在上面的例子中,我建议你创建一个模型类实现来存储所有的值。以下MVC architecture是最佳方式。
例如: -
@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];