4

(准备好见证一个新手非常非常困惑,我认为这是我的大脑难以掌握的基本逻辑形式。)

我现在有一个 .plist 文件。在“Key”列中有事件的名称(目前只是虚拟内容),在“Value”列中有这种格式的日期:19-07-2012。每行都是“字符串”类型。

在 viewDidLoad 方法中,我使用以下代码:

NSString *theFile = [[NSBundle mainBundle] pathForResource:@"dates" ofType:@"plist"];
theDates = [[NSDictionary alloc] initWithContentsOfFile:theFile];
theDatesList = [theDates allKeys];

这会将 plist 文件加载到字典中,然后将键加载到数组中,这是我学会填充 a 的方式UITableView,特别是在方法中使用以下代码cellForRowAtIndexPath

NSString *eventFromFile = [theDatesList objectAtIndex:indexPath.row];
NSString *dateFromFile = [theDates objectForKey:[theDatesList objectAtIndex:indexPath.row]];

但是我现在很困惑的是,我如何UITableView根据最快的日期订购细胞?因此,7 月 19 日的单元格将出现在 8 月 21 日之前,无论它在 plist 文件中的顺序如何。

UITableViewCell我已经设法计算了当前日期和 plist 中定义的日期之间的天数。就是这个代码:

// Set the date format
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];

// Get the current, then future date
NSDate *currentDate = [NSDate date];
NSDate *futureDate = [dateFormatter dateFromString:dateFromFile];

// Create the calendar object
NSCalendar *theCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

// Extract the "day" component from the calendar object
NSDateComponents *theDifferenceBetweenDays = [theCalendar   components:NSDayCalendarUnit
                                                            fromDate:currentDate
                                                            toDate:futureDate
                                                            options:0];

NSInteger theRemainingDays = [theDifferenceBetweenDays day];

但我真的不知道我在做什么。有人可以在正确的方向上轻推我吗?我研究了似乎相关NSSortDescriptors的方法,但实际实施的行为让我在过去六个小时内陷入困境。sortedArrayUsingSelector或者,也许他们不是正确的轨道。就像我说的,我很困惑。

谢谢。

4

2 回答 2

1

有几种方法可以按降序对NSArrayofNSDates进行排序。

你可以使用sortedArrayUsingDescriptors:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO];
theDatesList = [theDatesList sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

但我个人更喜欢sortedArrayUsingComparator:

theDatesList = [theDatesList sortedArrayUsingComparator:^NSComparisonResult(NSDate *date1, NSDate *date2){
    return [date2 compare:date1];
}];
于 2012-05-20T10:24:11.237 回答
-2

monotouch.dialog 存在一个目标 C 等价物。有了这个,它应该很容易。

于 2012-05-20T08:48:15.753 回答