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 に答える