我有以下程序:..-但是,我想在TitleForHeaderInSection中按日期降序排序数据,并且还希望将标题中的日期格式化为
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
if RegValueExists(RegistryAccount, 'RegistryPath','RegistryValue') then
begin
RegDeleteValue(RegistryAccount, 'RegistryPath','RegistryValue');
end;
end;
end;
以下是代码:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
// [formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setDateFormat:@"EEE, d MMM yyyy"];
NSDate *headerDate = (NSDate *)[managedObject valueForKey:@"dateCreated"];
NSString *headerTitle = [formatter stringFromDate:headerDate];
答案 0 :(得分:0)
基本思想是字典是无序的,因此您需要某种方法以正确的顺序检索它们。我可能会建议构建字典键的排序数组。
// build dictionary of objects, keyed by date
NSMutableDictionary *objectsForDates = ...
// build sorted array of dates in descending order
NSArray *dates = [[objectsForDates allKeys] sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
return [obj2 compare:obj1];
}];
然后,您可以使用此dates
对象来表示表视图的“部分”,然后使用它来知道要返回的字典中的哪个条目:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [self.dates count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self.objectsForDates[self.dates[section]] count];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return [self.formatter stringFromDate:self.dates[section]];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
Location *object = self.objectsForDates[self.dates[indexPath.section]][indexPath.row];
cell.textLabel.text = object.home;
return cell;
}
注意,我建议您对代码进行一些不相关的更改:
我建议将自定义对象类型用于JSON的内容。这比简单的NSDictionary
提供更强的输入。
我还要确保类型更自然地输入(例如,id
看起来应该是NSInteger
; date
看起来应该是NSDate
1}})。
我还会为此自定义类型提供initWithDictionary
初始化程序,以简化解析代码。
构建按日期键入的词典(您的convertSectionTableData
)的逻辑可以简化一点。
用户界面的日期格式化程序不应使用locale
的{{1}}。您解析JSON的格式化程序应该(或者更确切地说,它应该使用en_US
),但是当在UI中呈现格式时,您应该使用用户自己的语言环境。
用户界面的日期格式化程序也不应使用固定的en_US_POSIX
字符串。使用其中一个预先存在的dateFormat
,或者如果您必须使用dateStyle
,请使用dateFormat
构建本地化版本。
无论如何,把它拉到一起,就会得到类似的东西:
dateFormatFromTemplate
和
@interface Location : NSObject
@property (nonatomic) NSInteger identifier;
@property (nonatomic, copy) NSString *home;
@property (nonatomic, strong) NSDate *date;
- (instancetype)initWithDictionary:(NSDictionary *)dictionary;
@end
@implementation Location
- (instancetype)initWithDictionary:(NSDictionary *)dictionary {
self = [super init];
if (self) {
self.identifier = [dictionary[@"id"] integerValue];
self.home = dictionary[@"home"];
[self setDateFromString:dictionary[@"date"]];
}
return self;
}
- (void)setDateFromString:(NSString *)string {
static NSDateFormatter *formatter;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
formatter = [[NSDateFormatter alloc] init];
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
formatter.dateFormat = @"yyyy-MM-dd";
});
self.date = [formatter dateFromString:string];
}
@end