【问题标题】:Multiple NSMutableArrays, one sorted by Predicate, others reordered relatively多个 NSMutableArrays,一个按 Predicate 排序,其他的相对重新排序
【发布时间】:2013-03-08 23:03:19
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ios objective-c arrays cocoa-touch nsarray


    【解决方案1】:

    在上述情况下,我建议您创建一个模型类实现来存储所有值。关注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];
    

    【讨论】:

    • 我会回答你的问题,但是我决定使用更简单的选项来存储 MPMediaItems 数组,而不是获取它们的属性数组。还是谢谢!
    • 是的,这是一种类似的方法。而不是MPMediaItems,我只是建议了一个自定义模型类,以便您可以在其中添加任何其他属性。但其余谓词和排序将保持不变。
    • 嘿,后来整理了很多问题,但最终还是屈服于使用自定义模型类,它创造了奇迹。谢谢!!!
    猜你喜欢
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2020-09-19
    • 2015-10-06
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多