所以我有一个带有表视图的小项目。它的单元格是从另一个将文本/日期保存为用户默认值的视图控制器填充的。
但是,一切正常,我希望按上次保存日期对表格视图进行排序。
如何声明:
.h
NSMutableArray *dateArray;
.m
self.dateArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"date"];
我该如何实现?我已经看到了同时使用数组和可变方法的方法,但是对于userdefaults中的字符串却一无所获。
具有更多信息的更新:这是另一个视图控制器保存日期的方式
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMMM d, yyyy 'at' h:mm a"];
NSDate *dateNow = [NSDate date];
NSString *dateNowStr = [dateFormatter stringFromDate:dateNow];
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
NSLocale *locale = [NSLocale currentLocale];
[dateFormatter setCalendar:gregorianCalendar];
[dateFormatter setTimeZone:timeZone];
[dateFormatter setLocale:locale];
NSArray *tempDateArray = [[NSUserDefaults standardUserDefaults]objectForKey:@"date"];
NSMutableArray *mutableDateArray = [tempDateArray mutableCopy];
[mutableDateArray insertObject:dateNowStr atIndex:self.index];
[[NSUserDefaults standardUserDefaults] setObject:mutableDateArray forKey:@"date"];
它通过以下方式加载:
self.dateArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"date"];
谢谢。
一些想法:
您确实应该将NSMutableArray
中的日期另存为NSDate
对象。然后您可以简单地对数组进行排序:
[array sortUsingComparator:^NSComparisonResult(NSDate * _Nonnull obj1, NSDate * _Nonnull obj2) {
return [obj1 compare:obj2];
}];
或
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES];
[array sortUsingDescriptors:@[descriptor]];
当您在用户界面中显示日期时,可以使用格式化程序。但是您无需设置日历,时区或语言环境,因为所有这些都已默认为用户当前的设置。而且,我当然不会用公历替换用户的日历(因为这对于将设备配置为not使用公历的用户来说非常烦人。)>
此外,我们通常应避免指定日期格式字符串。最好使用日期/时间样式,例如:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateStyle = NSDateFormatterLongStyle; formatter.timeStyle = NSDateFormatterShortStyle;
这样,美国用户将看到:
2020年6月7日,下午5:10
德国用户将会看到:
- [Juni 2020 um 17:10
我们应该始终在用户的首选语言环境/日历中显示日期。