2012-04-02 4 views
0

배열을 sortedArrayUsingSelector 메서드를 사용하여 정렬 할 때 배열의 맨 위에 공백이있는 공백이있는 레코드가 제공됩니다. 나는 배열의 맨 위에 빈 이름이있는 레코드를 원하지 않습니다. 배열의 마지막에 있어야합니다. 어떻게 구현할 수 있습니까? 다음은 내 코드입니다"sortedArrayUsingSelector"를 사용하여 배열을 정렬하면 배열의 맨 위에 공백 값이있는 레코드가 표시됩니다.

self.tempArray = [NSMutableArray arrayWithArray:[self.tempArray sortedArrayUsingSelector:@selector(compare:)]]; 

사용자의 이름으로 정렬하고 있습니다. 다음은 비교 방법 코드입니다.

-(NSComparisonResult)compare:(User*)user { 

    return [self.firstName compare:user.firstName]; 
} 

모든 종류의 도움을 받으실 수 있습니다. 감사.

답변

1

빈 이름을 다르게 처리하도록 비교 방법을 변경하십시오.

-(NSComparisonResult)compare:(User*)user 
{ 
    NSString *selfName; 
    NSString *userName; 
    if (self.firstName && ![self.firstName isEqualToString:@""]) 
     selfName = self.firstName; 
    else 
     selfName = @"zzzzzzzzzz"; 

    if (user.firstName && ![user.firstName isEqualToString:@""]) 
     userName = user.firstName; 
    else 
     userName = @"zzzzzzzzzz"; 

    return [selfName localizedCaseInsensitiveCompare:userName]; 
} 

이 코드는 더 적은 코드 행으로 작성할 수 있지만 읽기 편하도록이 코드를 남겨 두었습니다. nil은 문자열 비교를위한 비교 자로 사용할 수 없습니다.

현재 공백을 영숫자 정렬 전에 채워지기 때문에 공백을 맨 위로 정렬합니다 (올바르게).

+0

답장을 보내 주셔서 감사합니다. 그러나 그 어떤 경우에도 작동하지 않습니다. 빈 레코드가 맨 위에 만 표시됩니다. – iOSAppDev

+0

사용자가 이름을 입력하지 않았기 때문에 첫 번째 이름은 nil입니다. – iOSAppDev

+0

편집 해 주셔서 감사합니다. 그것은 작동하지만, 결국 레코드가 엉망입니다. 배열이 끝날 때, A, E, T, I로 시작하는 이름의 레코드가 있습니다. 왜 이런 일이 일어 났는지 말할 수 있습니까? – iOSAppDev

1

비교 결과를 얻은 후 배열에서 빈 사용자 이름 개체를 검색하여 마지막 색인에 추가 할 수 있습니다.