2011-08-10 106 views
0

我有一个简单的NSArray具有某些阵列作为对象,其具有一些日期和字符串作为对象:按日期:NSArray的与NSArray的与日期 - 对象

  • 的NSArray(主阵列) - - - - ---------->表视图
    • NSArray的(辅助阵列)--->表视图细胞
      • 的NSDate ---------------- ----> table view cell text label
      • NSString -------------------> table view cell detail text label

我用的是主阵列为我的表视图 - >每个单元有它自己的“二次阵”。 现在我想通过NSDate对象对主数组进行排序。这听起来很简单,但我在网上找不到解决方案。

我想过使用NSSortDesriptors,但这些只是按照主数组中的对象对数组排序,而不是对辅助数组进行排序。

希望你能帮助我

编辑:难道解决这个问题,如果我使用的NSDictionary作为辅助阵列?

回答

4

您应该能够使用的NSArray sortedArrayUsingComparator如果您的应用程序是针对iOS 4.0或更高版本:

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

此假设日期字段始终是内部数组的索引0。如果您使用字典并按名称键入日期字段,它可能会稍微清晰一些,但如果您对日期字段始终保持索引0,那么上述内容应该可以工作。

+0

我试图在SDK 4.3的代码,但我得到以下错误:“[__NSCFArray比较:]:无法识别的选择发送例如“ – tharkay

+0

我在最初发布后立即对代码示例进行了更新:您是否有机会抓取先前的版本而不是更新的版本? –

+0

是的只有您的代码的以前版本导致错误代码。 – tharkay

1

假设我理解正确的话你的数据结构,这应该是接近:

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]; 
}];