2012-05-19 2 views
1

현재 내 응용 프로그램에는 NSUserDefaults에서로드하는 NSArray가 있습니다. NSArray의 각 객체는 약 5 개의 다른 키가있는 NSDictionary입니다. NSDictionary 자체의 NSDates를 기반으로 다시 주문합니다. 나는 NSDates만을 분류하고 싶지 않다.NSArray 안에서 NSDictionary를 NSDictionary 내부에 정렬합니까?

이 코드와 함께이 일을 시도 :

NSComparator sortByDate = ^(id dict1, id dict2) { 
     NSDate* n1 = [dict1 objectForKey:@"Date"]; 
     NSDate* n2 = [dict2 objectForKey:@"Date"]; 
     return (NSComparisonResult)[n1 compare:n2]; 
    }; 
    [self.cellArray sortUsingComparator:sortByDate]; 

아무것도 코드가 실행됩니다에도 불구하고 발생하지 않지만. 나는 내부의 무언가를 기반으로 NSDictionary를 재정렬하는 방법에 관해서는 혼란 스럽다.

누구든지 이에 대한 통찰력을 제공 할 수 있습니까?

감사합니다.

+0

정렬 전후에 NSLog 출력을 제공 할 수 있습니까? –

+0

@RyanPoolos이 작업을 수행 한 후 UITableView를 새로 고쳐서 어쨌든 변경 한 내용을 확실히 볼 수 있습니다. 이 코드를 작성하지 않은 코드에 문제가 있습니까? –

+0

또한 NSLoging을 사용하여 n1 및 n2를 시도하고 올바른 날짜 개체가 제대로 가져 오는지 확인하십시오. –

답변

1

인라인 정렬을 시도해 볼 수는 있지만 중요한 효과가 있는지 의심 스럽습니다. 하지만 나는 결코 내 블록을 추상화 할 수 없다고 말할 수 있습니다. 확실하게 NSLogging을 시도하여 유효한 NSDate를 얻었는지 확인하십시오.

[cells sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
     NSDate *n1 = [obj1 objectForKey:@"Date"]; 
     NSDate *n2 = [obj2 objectForKey:@"Date"]; 

     if (n1 > n2) { 
      return NSOrderedAscending; 
     } else (n1 < n2) { 
      return NSOrderedDescending; 
     } else { 
      return NSOrderedSame; 
     } 

    }]; 
+0

운영자 또는 귀하의 반품을 되돌려 원하는 순서를 얻을 수 있습니다. –

+0

지금까지 도움을 주셔서 감사합니다. 그러나 나는 처음 주문하는 가장 새로운 날짜와 혼동합니다. 그것이 제가 원하는 유일한 주문입니다. 나는 왜 당신이 if와 else를 사용하는지 혼란 스럽다. 이 라인을 편집하여 원하는대로 할 수있는 방법이 없습니까? return (NSComparisonResult) [n1 비교 : n2]; –

+0

if 문이 작동합니다. n1이 n2보다 큰 경우 n2보다 앞에 n1이 반환됩니다. 그렇지 않으면 n1 앞에 n2가 리턴됩니다. NSDates는 1970 년 이래로 초를 나타내는 int입니다. 따라서 연산자가 아닌 단순한 것보다 더 단순한 것이 더 오래 될 것입니다. –

관련 문제