【问题标题】:Sort by Date: NSArray with NSArray with Date-Object按日期排序:NSArray 和 NSArray 和 Date-Object
【发布时间】:2011-10-23 17:37:23
【问题描述】:

我有一个简单的 NSArray,它有一些数组作为对象,其中有一些日期和字符串作为对象:

  • NSArray(主数组)---------------> 表格视图
    • NSArray(二级数组)--->表格视图单元格
      • NSDate --------------------> 表格视图单元格文本标签
      • NSString -------------------> 表格视图单元格详细信息文本标签

我将主数组用于我的表格视图 -> 每个单元格都有自己的“辅助数组”。 现在我想按 NSDate 对象对主数组进行排序。这听起来很简单,但我在网上没有找到解决方案。

我考虑过使用 NSSortDesriptors,但那些只是根据主数组中的对象而不是辅助数组中的对象对数组进行排序。

希望你能帮助我

编辑:如果我使用 NSDictionary 作为辅助数组,它会解决问题吗?

【问题讨论】:

    标签: iphone objective-c sorting nsarray nsdate


    【解决方案1】:

    如果您的应用面向 iOS 4.0 或更高版本,您应该可以使用 NSArray sortedArrayUsingComparator:

    NSArray *sortedArray = [mainArray sortedArrayUsingComparator: ^(id obj1, id obj2) {
        return [[obj1 objectAtIndex:0] compare:[obj2 objectAtIndex:0]];
    }];
    

    这假定日期字段始终位于内部数组的索引 0 中。如果您使用字典并按名称键入日期字段,可能会更简洁一些,但如果您对始终保留在索引 0 中的日期字段感到满意,那么上述方法应该可以工作。

    【讨论】:

    • 我在 SDK 4.3 中尝试了您的代码,但出现以下错误:“[__NSCFArray compare:]: unrecognized selector sent to instance”
    • 我在最初发布后立即对代码示例进行了更新:您有没有机会使用以前的版本而不是更新的版本?
    • 是的,只有以前版本的代码会导致错误代码。
    • 但这对我不起作用......我想我会将辅助数组更改为对我来说可能更容易的字典
    【解决方案2】:

    假设我正确理解了您的数据结构,这应该很接近:

    NSArray *sortedArray = [mainArray sortedArrayUsingComparator:^(id ary1, id ary2) {
        NSArray *array1 = (NSArray *)ary1;
        NSArray *array2 = (NSArray *)ary2;
        NSDate *date1 = (NSDate *)[array1 objectAtIndex:0];
        NSDate *date2 = (NSDate *)[array2 objectAtIndex:0];
        return [date1 compare:date2];
    }];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      相关资源
      最近更新 更多