【发布时间】:2011-10-30 16:48:09
【问题描述】:
我在执行以下任务时遇到了困难:我有一个 NSMutableArray,其中包含我从核心数据中提取的 NSManagedObjects“OpeningHours”。
NSMutableArray *openingHoursArray = [NSMutableArray arrayWithArray: [[museum valueForKey:@"openingHours"] allObjects]];
数组未排序,因为从我的 NSManagedObject“博物馆”获取键的值会返回一个随机组织的集合。
数组中的 NSManagedObjects "openingHours" 具有 NSDate 类型的值,可通过键 "start" 和 "end" 访问。现在,为了以一种有意义的方式显示我的营业时间,我访问了各个日期的工作日和时间信息,到目前为止,使用这段代码可以正常工作:
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:mainDelegate.localeCode];
NSDateFormatter *weekday = [[[NSDateFormatter alloc] init] autorelease];
[weekday setLocale:locale];
[weekday setDateFormat: @"EEEE"];
[NSDateFormatter *time = [[[NSDateFormatter alloc] init] autorelease];
[time setLocale:locale];
[time setTimeStyle:NSDateFormatterShortStyle];
for (NSManagedObject *openingHour in openingHoursArray) {
NSLog(@"%@", [openingHour valueForKey:@"start"]);
NSDate *startDate = [openingHour valueForKey:@"start"];
NSDate *endDate = [openingHour valueForKey:@"end"];
NSString *startDay = [weekday stringFromDate:startDate];
NSString *endDay = [weekday stringFromDate:endDate];
NSString *startTime = [time stringFromDate:startDate];
NSString *endTime = [time stringFromDate:endDate];
if (![startDay isEqualToString:endDay]) {
[openingHoursString appendFormat:@"%@ - %@:\t%@ - %@ \n", startDay, endDay, startTime, endTime];
}
else {
[openingHoursString appendFormat:@"%@:\t%@ - %@ \n", startDay, startTime, endTime];
}
}
这给了我想要的输出:
星期四:上午 10:00 - 晚上 9:00
周五至周日:上午 10:00 至下午 6:00
周一至周三:上午 10:00 至下午 5:00
现在的问题是:我当然希望首先显示星期一的开放时段。我需要按开始日期值的工作日对数组进行排序。我尝试使用以下方法对其进行排序:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"start" ascending:TRUE];
[openingHoursArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
但显然这不起作用,因为它只是按日期排序,不幸的是 1970-01-01 是星期四,因此星期四将是我的数组中按上述代码排序的第一项。
有没有人知道如何“解决这个问题”? :-) 我完全坚持这个.. 非常感谢!
【问题讨论】:
-
将开始日期推迟 2 天而不是实施日期排序可能会更好,或者您是否有其他理由希望优先考虑日期?
-
这是一个想法,但我不知道我需要轮班多少天,因为营业时间可能会有所不同 - 每天可能有一个单独的营业时间,或者涵盖更长的时间,例如“周一 - 周六”,或基本上其他任何东西.. 我需要一个适用于任何开放时间组合的解决方案,总是首先显示星期一(如果星期一是开放日).. 我猜有点棘手!
标签: iphone objective-c ios xcode nsdate