按日期对UITableView中的项目进行排序

时间:2011-06-28 19:48:40

标签: iphone uitableview sorting group-by nsdate

所以在我的应用程序中,我有一个UITableView,在导航控制器中有一个按钮来添加一个新项目。这将带您进入添加项目屏幕,完成后,我使用自定义委托将详细信息viewController中的信息传递给主tableViewController。现在我有来自委托的信息,我将3条信息放入我的主数组中的NSArray中。现在我的问题是,我如何按日期对细节项目进行排序。我已经尝试了3次(不成功),我似乎无法弄明白。数组和字典变得混乱,因为它们是嵌套的。非常感谢任何帮助。

tableViewController类中的Delegate方法:

-(void)finishedAddingFoodItemFromDetail:(NSDate *)date whatWasEaten:(NSString *)whatFood whichMeal:(NSString *)meal{

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMMM d, yyyy"];
NSString *dateString = [[NSMutableString alloc] init];
dateString = [dateFormatter stringFromDate:date];

if (!self.theArray) {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"theArray"]) {
        self.theArray = [defaults objectForKey:@"theArray"];
    }
    else{
        self.theArray = [[NSMutableArray alloc] init];
    }
}
[self.theArray addObject:[NSArray arrayWithObjects:dateString, meal, whatFood, nil]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.theArray forKey:@"theArray"];

[self.tableView reloadData];
[self dismissModalViewControllerAnimated:YES];
}

这是我想到的文件,但我似乎无法实现它。

/*  file higharchy
 *   - theBigDict     //large dictionary holding everything
 *       - MutableArray by day stored as objects of theBigDict
 *       - Array of the meals info:
 *           - Meal type
 *           - Food
 */

1 个答案:

答案 0 :(得分:0)

NSMutableArray上有几种方法可以调用它们的内容:

– sortUsingDescriptors:
– sortUsingComparator:
– sortWithOptions:usingComparator:
– sortUsingFunction:context:
– sortUsingSelector:

由于你有一个复杂对象数组,你需要编写自己的函数或比较器并调用相应的sortUsingXxx:方法。在将数组存储回NSUserDefaults并在调用表上的reloadData:之前执行此操作。

这有帮助吗?

编辑:您的自定义函数或比较器必须从被比较的两个数组元素中提取日期(传递到您的函数中)并返回相应的比较结果,例如: NSOrderedAscending等。