我對以下任務有困難:我有一個NSMutableArray,其中包含NSManagedObjects「OpeningHours」,這是我從核心數據中提取的。Objective-C:按工作日對NSMates的NSMutableArray進行排序
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 AM - 9:00 PM
週五 - 週日:上午10點 - 下午6:00
週一 - 週五:10:00 AM - 5:00 PM
現在的問題是:我當然想要首先顯示星期一的開放時間。我需要在開始日期值的工作日排序我的數組。我試着用下面的排序是:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"start" ascending:TRUE];
[openingHoursArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
但顯然,這並不工作,因爲它只是通過排序日期和1970-01-01不幸星期四,因此週四將我的數組的第一個項目按上述代碼排序。
有沒有人有如何「解決這個問題」的好主意? :-)我完全被困在這.. 非常感謝!
這可能是更好的只是2天轉移,而不是執行日期排序開始日期,或者你有更多的理由要求日期優先? –
這是一個想法,但我不知道我需要轉多少天,因爲開放時間可能會有所不同 - 每天可能會有個人開放時間,或者覆蓋更長的時間,比如「mon-sat」,或基本上其他任何..我需要一個解決方案,將開放時間的任何組合工作,總是首先顯示星期一(如果星期一是開放日)..有點棘手我猜! – Julia