NSSortDescriptor 사용

5480 단어
| NSSortDescriptor 는 무엇입니까?너는 그것을 정렬 규칙에 대한 설명자로 볼 수 있다. 왜냐하면 우리는 그것을 사용하여 우리 그룹의 대상을 정렬 조작할 수 있기 때문이다
가령 지금 이런 수요가 있다고 가정하면 수조 안에 10개의 Person 대상이 있고 각 Person 대상은 자신의 이름과 나이, 점수가 있다. 우리는 수조 안에 있는 10개의 대상에 대해 다음과 같은 정렬 조작 규칙을 해야 한다.
1. 먼저 나이순으로 나눈다.나이가 같으면 점수순으로.
이 요구를 실현하려면 NSSortDescriptor라는 대상을 몰랐으면 코드를 많이 썼을 텐데 이 대상을 빌려서 저희가 위의 요구를 쉽게 실현할 수 있을 거예요.
먼저 Person 클래스를 만들어야 합니다. 이름, 연령, 점수 등 세 가지 속성을 포함하여 Person 대상 코드를 신속하게 만드는 구조 방법을 제공합니다.
#import 

@interface Person : NSObject

@property(nonatomic,strong)NSString *name;

@property(nonatomic,assign)NSInteger age;

@property(nonatomic,assign)float  score;

- (instancetype)initWithName:(NSString*)name age:(NSInteger)age score:(float)score;

@end
#import "Person.h"

@implementation Person

- (instancetype)initWithName:(NSString *)name age:(NSInteger)age score:(float)score
{
    if (self = [super init]) {
        
        self.name = name;
        self.age = age;
        self.score = score;
        
    }
    return self;
}

@end

다음은 ViewController(ViewController는 UItableview Controller를 계승하고 프로그램과 컨트롤러는 네비게이션 컨트롤러이다)에서 다음과 같은 몇 가지 일을 합니다.
  • Person 객체 10개를 작성하여 데이터 배열에 저장합니다. 2.TableView를 사용하여 데이터를 보여줍니다. 3.내비게이션 표시줄 왼쪽에 있는 단추를 정렬하기 위해 정렬을 누르면 우리가 설정한 규칙에 따라 정렬할 수 있음
  • Person 대상을 10개 만들고 데이터 그룹에 저장합니다. ViewController에 그룹 속성을 추가합니다. 데이터 강력한 인용이 있습니다.
    @interface ViewController ()
    @property(nonatomic,strong)NSMutableArray *datas;
    @end
    

    그런 다음 데이터 로드를 게을리합니다.
    - (NSMutableArray *)datas
    {
        if (!_datas) {
            
            _datas = [NSMutableArray array];
            
            Person *p1 = [[Person alloc] initWithName:@"jack" age:20 score:97];
            Person *p2 = [[Person alloc] initWithName:@"anne" age:8 score:33];
            Person *p3 = [[Person alloc] initWithName:@"zhng" age:54 score:11];
            Person *p4 = [[Person alloc] initWithName:@"tuoma" age:76 score:54];
            Person *p5 = [[Person alloc] initWithName:@"gril" age:95 score:12];
            Person *p6 = [[Person alloc] initWithName:@"boy" age:21 score:76];
            Person *p7 = [[Person alloc] initWithName:@"big" age:53 score:98];
            Person *p8 = [[Person alloc] initWithName:@"hack" age:33 score:66];
            Person *p9 = [[Person alloc] initWithName:@"zoom" age:33 score:21];
            Person *p10 = [[Person alloc] initWithName:@"right" age:69 score:88];
    
            
            
            [_datas addObject:p1];
            [_datas addObject:p2];
            [_datas addObject:p3];
            [_datas addObject:p4];
            [_datas addObject:p5];
            [_datas addObject:p6];
            [_datas addObject:p7];
            [_datas addObject:p8];
            [_datas addObject:p9];
            [_datas addObject:p10];
        }
        return _datas;
    }
    

    그런 다음 ViewController 에 다음 코드를 입력하여 이 데이터를 보여 드리겠습니다.
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return  self.datas.count;
    }
    
    - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
            static NSString *ID = @"cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
        if (!cell) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ID];
        }
        
        Person *p = self.datas[indexPath.row];
        
        cell.textLabel.text = [NSString stringWithFormat:@"  :%@    :%zd",p.name,p.age];
        cell.detailTextLabel.text =[NSString stringWithFormat:@"%f", p.score];
    
        return cell;
    }
    

    -----------------------------중점-------------------------------------
    다음 순서는 다음과 같습니다.
    규칙은 다음과 같습니다.우선 나이순으로 2.나이가 같으면 점수에 따라 정렬을 해야 합니다. 한 설명은 한 속성만 설명할 수 있습니다. 여러 설명이 필요하면 여러 설명자를 만들어야 합니다.
    여기서 필요한 것은 두 명의 설명자를 만들어야 한다. 하나는 나이에 대한 설명이고 하나는 점수에 대한 설명 코드이다.
    NSSortDescriptor *ageSD = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];//ascending:YES         NO     
    NSSortDescriptor *scoreSD=[NSSortDescriptor sortDescriptorWithKey:@"score" ascending:YES];
    

    이 두 설명자를 만들면sortedArrayUsingDescriptors 방법을 호출해서 정렬할 수 있습니다sortedArrayUsingDescriptors 방법은 하나의 수조의 매개 변수에 설명자를 넣은 다음에 정렬된 수조로 되돌아오기 때문에 우리는 이렇게 한다.
    self.datas = [[self.datas sortedArrayUsingDescriptors:@[ageSD,scoreSD]] mutableCopy];
    

    탐색 모음의 왼쪽에 있는 정렬 버튼을 클릭하면 다음과 같은 작업이 수행됩니다.
    - (IBAction)sortAge:(id)sender {
        
        NSSortDescriptor *ageSD = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
        NSSortDescriptor *scoreSD=[NSSortDescriptor sortDescriptorWithKey:@"score" ascending:YES];
        self.datas = [[self.datas sortedArrayUsingDescriptors:@[ageSD,scoreSD]] mutableCopy];
        [self.tableView reloadData];
    }
    

    총괄: (1) 하나의 묘사는 하나의 속성만 묘사할 수 있다. 만약에 여러 개의 묘사가 필요하다면 우리는 여러 명의 묘사자를 만들어야 한다.
    NSSortDescriptor *ageSD = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];//ascending:YES         NO     
    

    (2) 이 두 설명자를 만들면 우리는 수조의sortedArrayUsingDescriptors 방법을 호출하여 정렬을 실현할 수 있다. - - - -> 정렬된 수조를 되돌려준다.
    self.datas = [[self.datas sortedArrayUsingDescriptors:@[ageSD,scoreSD]] mutableCopy];
    

    (3) 데이터 갱신
    [self.tableView reloadData];
    

    문장에 참고하다

    좋은 웹페이지 즐겨찾기