gpt4 book ai didi

iphone - Objective-C iPhone - 在 UITableView 数据源的多个部分中排序数据

转载 作者:搜寻专家 更新时间:2023-10-30 20:22:57 25 4
gpt4 key购买 nike

为了问这个关于订购的问题。以下 MyObject 类返回一个具有随机生成的类别名称的实例。

我使用以下 dataSource 方法:

numberOfSections 使用 [dataSource count] 访问。

titleForSection 使用 [[dataSource objectAtIndex:indexPath.section] valueForKey:@"categoryName"] 访问。

numberOfRowsInSection 使用 [[[dataSource objectAtIndex:indexPath.section] valueForKey:@"myObjects"] count] 访问。

最后,使用 [[[dataSource objectAtIndex:indexPath.section] valueForKey:@"myObjects"] objectAtIndex:indexPath.row] 访问每一行的 MyObject > 在 cellForRowAtIndexPath 方法上。

我使用以下代码创建了一个显示 9 个部分类别的 dataSource,但是我对这些类别的顺序和其中的数据有点困惑。假设有一个 NSDate 属性作为 MyObject 类的一部分。

问题:我将如何使用它按降序显示记录?

- (void)createDatasource
{
NSInteger numberOfObjects = 10;
NSMutableArray *objects = [NSMutableArray arrayWithCapacity:numberOfObjects];
NSMutableArray *categories = [NSMutableArray arrayWithCapacity:numberOfObjects];
for (int i = 0; i < numberOfObjects; i++)
{
MyObject *obj = [[MyObject alloc] init];
[objects addObject:obj];
[categories addObject:obj.category];
[obj release];
}
NSSet *set = [NSSet setWithArray:categories];
NSMutableArray *dataSource = [[NSMutableArray alloc] initWithCapacity:[set count]];
for (NSString *categoryString in set)
{
NSMutableDictionary *mainItem = [[NSMutableDictionary alloc] initWithObjectsAndKeys:nil, @"categoryName", nil, @"myObjects", nil];
NSMutableArray *mainItemMyObjects = [NSMutableArray array];
[mainItem setValue:categoryString forKey:@"categoryName"];
for (MyObject *obj in objects)
{
if ([obj.category isEqualToString:categoryString])
{
[mainItemMyObjects addObject:obj];
}
}
[mainItem setValue:mainItemMyObjects forKey:@"myObjects"];
[dataSource addObject:mainItem];
[mainItem release];
}
NSLog (@"objects = %@\ncategories = %@\nset = %@\ndatasource = %@", objects, categories, set, dataSource);
}

最佳答案

最简单的方法是使用 NSMutableArray's sorting mutators 对数组进行排序或 NSArray's sorting methods .否则,您必须构建某种从输入索引到数据源索引的映射,以供各种数据源方法使用。


编辑 请求用于排序的示例代码,像这样的东西应该可以工作。我假设您希望通过 MyObject 上名为 date 的属性对所有内容进行排序。

// First, sort the myObject mutable array in each category
for (NSDictionary *d in dataSource) {
[[d valueForKey:@"myObjects"] sortUsingComparator:^NSComparisonResult(id o1, id o2){
// Compare dates. NSDate's 'compare:' would do ascending order, so if we just
// reverse the order of comparison they'll come out descending.
return [[o2 date] compare:[o1 date]];
}];
}

// Second, sort the categories by the earliest dated object they contain
[dataSource sortUsingComparator:^NSComparisonResult(id o1, id o2){
// Extract the first object from each category's array, which must be the
// earliest it contains due to the previous sort.
MyObject *myObject1 = [[o1 valueForKey:@"myObjects"] objectAtIndex:0];
MyObject *myObject2 = [[o2 valueForKey:@"myObjects"] objectAtIndex:0];

// Compare dates, as above.
return [[myObject2 date] compare:[myObject1 date]];
}];

关于iphone - Objective-C iPhone - 在 UITableView 数据源的多个部分中排序数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5293295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com