iphone – Objective-C:按工作日排序NSDates的NSMutableArray

iphone – Objective-C:按工作日排序NSDates的NSMutableArray,第1张

概述我遇到以下任务有困难:我有一个NSMutableArray包含NSManagedObjects“OpeningHours”,我从核心数据中提取. NSMutableArray *openingHoursArray = [NSMutableArray arrayWithArray: [[museum valueForKey:@"openingHours"] allObjects]]; 数组未排序,因 我遇到以下任务有困难:我有一个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",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星期四,因此星期四将是我的数组的第一项按上面的代码排序.

有没有人对如何“解决这个问题”有一个好主意? :-)我完全坚持这个..
非常感谢!

解决方法 这样的事情应该有效:

NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIDentifIEr:NSGregorianCalendar] autorelease];NSArray *sortedArray = [openingHoursArray sortedArrayUsingComparator: ^(ID obj1,ID obj2) {    NSDate *startDate1 = [obj1 valueForKey:@"start"];    NSDate *startDate2 = [obj2 valueForKey:@"start"];    NSDateComponents *components1 = [calendar components:NSWeekdayCalendarUnit fromDate:startDate1];    NSDateComponents *components2 = [calendar components:NSWeekdayCalendarUnit fromDate:startDate2];    NSInteger weekday1 = [components1 weekday];    if (weekday1 == 1) weekday1 = 8; //Order sundays last    NSInteger weekday2 = [components2 weekday];    if (weekday2 == 1) weekday2 = 8;    return [[NSNumber numberWithInteger:weekday1] compare:[NSNumber numberWithInteger:weekday2]];}];
总结

以上是内存溢出为你收集整理的iphone – Objective-C:按工作日排序NSDates的NSMutableArray全部内容,希望文章能够帮你解决iphone – Objective-C:按工作日排序NSDates的NSMutableArray所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1006478.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存