【问题标题】:Sort items in a UITableView by date按日期对 UITableView 中的项目进行排序
【发布时间】:2011-06-28 19:48:39
【问题描述】:

所以在我的应用程序中,我有一个UITableView,并且在导航控制器中有一个添加新项目的按钮。这比将您带到添加项目屏幕,当您完成时,我使用自定义委托将信息从详细视图控制器传递到主 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
 */

【问题讨论】:

    标签: iphone uitableview sorting group-by nsdate


    【解决方案1】:

    NSMutableArray 上有几种方法可以调用来对其内容进行排序:

    – sortUsingDescriptors: – 排序使用比较器: – sortWithOptions:usingComparator: – sortUsingFunction:上下文: – 排序使用选择器:

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

    这有帮助吗?

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

    【讨论】:

    • 哦,对不起。我添加了附加信息只是为了阐明您的功能必须做什么。如果您的数组只是一个数组,例如 NSNumbers,那么您可以使用默认比较器对数组进行排序。 (SDK 知道如何比较 NSNumbers)。但是由于您的数组元素很复杂,您必须编写比较器函数,该函数从您想要排序的每个数组元素(传递到比较器)中提取数据(日期)并比较它们并返回一个适当的 NSOrderedXxx 结果。有意义吗?
    • 但是我想把每一天放在不同的部分标题下(日期——如果我之前不清楚的话,抱歉)。数组排序后我会怎么做
    • 啊!这是一个不同的问题,但并不难解决。您必须保留一组部分索引标题和索引。我通常使用 2 个数组来执行此操作,它们的元素彼此平行。一个数组具有每个部分的标题,另一个是实际数据数组的索引数组,指示每个部分从哪个索引开始。看看UITableView 的sectionIndexTitlesForTableView 方法,以及tableView:sectionForSectionIndexTitle:atIndex:
    • 对不起,我不太明白你在说什么或怎么做
    • 好的,基本上,如果你想有章节标题,你必须提供它们;这只是数据源的另一个责任。事实上,我最后的建议是不正确的,对于节标题...(对于索引,您需要弄乱那些 sectionIndex 方法...)无论如何,对于节标题,您可以通过提供 NSString 或 UIView方法 tableView:titleForHeaderInSection: 或 tableView:viewForHeaderInSection: 分别。根据该部分,您应该能够以某种方式(例如,在数组中)查找正确的标题标题(或其他标题)应该是什么。
    猜你喜欢
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    相关资源
    最近更新 更多