2012-04-11 2 views
1

엔티티 폴더에서 가져 오기 요청을 실행하려고하는데 정렬시 마지막 개체가 xyz 인 폴더로 지정합니다.NSSortDescriptor가 호출되지 않습니다.

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription 
            entityForName:@"Folder" inManagedObjectContext:appDelegate.managedObjectContext]; 

    [fetchRequest setEntity:entity]; 

    NSSortDescriptor *lastDescriptor = 
    [[[NSSortDescriptor alloc] initWithKey:@"folderName" ascending:YES comparator:^NSComparisonResult(NSString* name1, NSString* name2) { 
     NSLog(@"descriptor"); 
     if ([name1 isEqualToString:@"xyz"]) { 
      return NSOrderedAscending; 
     } 
     if ([name2 isEqualToString:@"xyz"]) { 
      return NSOrderedDescending; 
     } 

     return [name1 compare:name2]; 
    }] autorelease]; 


    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:lastDescriptor]]; 
    [fetchRequest setFetchBatchSize:5]; 

    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:appDelegate.managedObjectContext sectionNameKeyPath:nil cacheName:nil]; 
    self.fetchedResultsController = theFetchedResultsController; 
    self.fetchedResultsController.delegate=self; 

    [fetchRequest release]; 
    [theFetchedResultsController release]; 

    NSError *error; 
    if (![[self fetchedResultsController] performFetch:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     exit(-1); // Fail 
    } 

그러나 NSLog 문이 호출되지 않습니다. 그럴 예정입니까? 폴더 xyz는 마지막에 나타나지 않지만 모든 것이 알파벳 순서로 정렬됩니다. 내가 뭔가 잘못하고 있는거야?

편집 : 배치하는 전체 코드

+0

내 질문일지도 모르지만 실제로 가져 오기를 실행하고 있습니까? 이것은 단지 정렬을 설정합니다. – danh

+0

글쎄, 나중에 결과를 얻는다. 제대로 분류되지 않았다. 이것이 내가 호출 할 유일한 정렬 설명자 임에도 불구하고 알파벳순으로 결과를 얻습니다. – Snowman

+0

NSLog 문이 나타나야합니까? – Snowman

답변

1

이 코드 (코드)를 작동 :이 코드가 작동합니다 예측

- (void)sortMe { 

    NSDictionary *d0 = [NSDictionary dictionaryWithObject:@"efg" forKey:@"folderName"]; 
    NSDictionary *d1 = [NSDictionary dictionaryWithObject:@"xyz" forKey:@"folderName"]; 
    NSDictionary *d2 = [NSDictionary dictionaryWithObject:@"abc" forKey:@"folderName"]; 
    NSDictionary *d3 = [NSDictionary dictionaryWithObject:@"def" forKey:@"folderName"]; 
    NSArray *testMe = [NSArray arrayWithObjects:d0, d1, d2, d3, nil]; 

    NSSortDescriptor *lastDescriptor = 
    [[NSSortDescriptor alloc] initWithKey:@"folderName" ascending:YES comparator:^NSComparisonResult(NSString* name1, NSString* name2) { 
     NSLog(@"descriptor"); 
     if ([name1 isEqualToString:@"xyz"]) { 
      return NSOrderedAscending; 
     } 
     if ([name2 isEqualToString:@"xyz"]) { 
      return NSOrderedDescending; 
     } 

     return [name1 compare:name2]; 
    }]; 

    NSArray *sorted = [testMe sortedArrayUsingDescriptors:[NSArray arrayWithObject:lastDescriptor]]; 
    for (NSDictionary *d in sorted) { 
     NSLog(@"value=%@", [d valueForKey:@"folderName"]); 
    } 
} 

, 너무 :

NSError *error; 
NSArray *result = [appDelegate.managedObjectContext executeFetchRequest:fetchRequest error:&error]; 
// log the array 

내가 문제를 생각 NSFetchedResultsController 대리자 설치, 코드의 다른 부분에 있습니다.

+1

전화 이 정렬되지 않은 배열을 반환했습니다 : NSArray * result = [appDelegate.managedObjectContext executeFetchRequest : fetchRequest 오류 : & 오류]; 그러나 같은 정렬 설명자를 사용하여 배열을 정렬하면 작동합니다. 가져 오기 요청은 정렬 설명자를 적용하지 않는 것과 관련이 있습니다. 이 문제를 해결하기 위해 어디에서 시작해야합니까? – Snowman

관련 문제