我有一个自定义UITableView,它实现了委托方法和数据源 方法。我会知道"年龄"我的自定义对象的属性。
我需要在哪里实施排序?我怎么排序?
我的排序看起来像这样:
- (void)sortPersonByAge{
for(int i = 0; i < personArray.count(); i++){
for (int j = i+1; j < personArray.count(); j++){
Person * pJ = [personArray objectAtIndex:i];
Person * pI = [personArray objectAtIndex:j];
Person * pD; //Dummy
if (pi.Age > pj.Age){
[personArray exchangeObjectAtIndex:i withObjectAtIndex:j];
}
}
}
}
排序也不是100%正常工作。
答案 0 :(得分:-1)
您应该在Person类中实现compare:
方法,然后在包含数据的数组上调用此方法:
NSArray * sortedPersonArray = [personArray sortedArrayUsingSelector:@selector(compare:)];
关于compare:
实施:
- (NSComparisonResult)compare:(Person *)person{
if (self.Age > person.Age) {
return NSOrderedDescending;
}else if(self.Age < person.Age){
return NSOrderedAscending;
}else{
return NSOrderedSame;
}
}
答案 1 :(得分:-1)
或者您可以这样排序:
NSArray *sortedArray;
sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
NSDate *first = [(Person*)a birthDate];
NSDate *second = [(Person*)b birthDate];
return [first compare:second];
}];
或者像这样:
[self.array sortUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]];
您可以在表格中使用此数组:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier" forIndexPath:indexPath];
Object *object = [self.sortedArray objectAtIndex:indexPath.row];
cell.textLabel.text = object.name;
return cell;
}