1

エンティティFoldersでフェッチ要求を実行しようとしていますが、名前が付けられたフォルダーxyzを並べ替えたときに最後のオブジェクトにします。

  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は最後に表示されませんが、すべてがアルファベット順に並べ替えられます。私は何か間違ったことをしていますか?

編集:投稿された完全なコード

4

1 に答える 1

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デリゲートのセットアップにあると思います。

于 2012-04-11T16:11:28.267 に答える