2013-06-14 2 views
0

다음은 NSMutableArray에서 항목을 정렬하는 데 사용하는 코드입니다. 코드는 오류없이 작동하지만 필터를 적용한 후에는 순서가 변경되지 않습니다. 내가 뭔가 잘못하고 있는거야?정렬 NSMutableArray는 객체 순서를 변경하지 않습니다.

NSArray *filtered = [posts sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
    Post *post1 = (Post *)obj1; 
    Post *post2 = (Post *)obj2; 

    int p1 = post1.firstPhotoVoters.count + post1.firstPhotoVoters.count; 
    int p2 = post2.firstPhotoVoters.count + post2.firstPhotoVoters.count; 

    if (p1 < p2) return (NSComparisonResult)NSOrderedAscending; 
    if (p1 > p2) return (NSComparisonResult)NSOrderedDescending; 

    return (NSComparisonResult)NSOrderedSame; 
}]; 
+2

"순서가 바뀌지 않습니다"-'posts' 또는'filtered'의 순서를 확인하고 있습니까? – Kreiri

+1

'NSComparisonResult' 캐스트는 완전히 불필요합니다. 또한,'p1'과'p2' 변수는 셀 수의 두 배만을 사용하기 때문에 이상합니다 (NSUInteger 여야합니다). double 값으로 정렬하는 것은 값으로 정렬하는 것과 같습니다. – Sulthan

+0

'filtered'또는'posts'의 순서를 확인하고 있습니까? 블록이 실행될 때 NSOrderedSame 반환 값이 항상 도달합니까? – CodaFi

답변

0
int p1 = post1.firstPhotoVoters.count + post1.firstPhotoVoters.count; 
int p2 = post2.firstPhotoVoters.count + post2.firstPhotoVoters.count; 

동일한 속성을 두 번 사용하고 있습니다. 아마 피연산자 중 하나와 다른 속성이 있어야합니다.

1

당신은 return NSOrderedAscendingreturn NSOrderedDescending에 중단 점을 넣어 예상치 못한 일이 일어나고 있는지 확인하기 위해 두 개체에 대한 firstPhotoVoters.count를 기록 할 수있다. 코드는

int p1 = post1.firstPhotoVoters.count; 
int p2 = post2.firstPhotoVoters.count; 

대신

int p1 = post1.firstPhotoVoters.count + post1.firstPhotoVoters.count; 
int p2 = post2.firstPhotoVoters.count + post2.firstPhotoVoters.count; 

로 사용할 수 있습니다 아무것도 사이클의 낭비, 변경할 것이라는 사실에서 떨어져 괜찮습니다.

+0

예 복사 붙여 넣기 오류입니다. –

+0

주문이 변경되지 않는다고 할 때 게시물과 비교하여 필터링 된 순서를 의미합니까? – jbat100

+0

합계 연산자의 오른쪽은 secondPhotoVoters.count 여야합니다. 도와 주셔서 감사합니다. –

관련 문제