0
Error fetching: Error Domain=NSCocoaErrorDomain Code=134060 

"The operation couldn’t be completed. (Cocoa error 134060.)" 
UserInfo=0x132eb960 {reason=The fetched object at index 76 
has an out of order section name 'å. Objects must be sorted by section name'}

確認したところ、同じ名前の質問が他にもありますが、この場合、分音記号のアルファベット記号が原因で問題が発生します。

- (NSFetchedResultsController *)fetchedResultsControllerWithPredicate:
(NSPredicate *)aPredicate {
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];

    fetchRequest.entity = [Word MR_entityDescription];

    [fetchRequest setFetchBatchSize:20];
    [fetchRequest setPredicate:aPredicate];

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name"
                                                                     ascending:YES
                                                                      selector:@selector(localizedCompare:)];

    fetchRequest.sortDescriptors = @[sortDescriptor];

    NSFetchedResultsController *aFetchedResultsController =
    [[NSFetchedResultsController alloc]
     initWithFetchRequest:fetchRequest
     managedObjectContext:localContext
     sectionNameKeyPath:@"name.stringGroupByFirstInitial" cacheName:nil];

    aFetchedResultsController.delegate = self;

    NSError *anyError = nil;
    if (![aFetchedResultsController performFetch:&anyError]) {
        NSLog(@"Error fetching: %@", anyError);
    }

    return aFetchedResultsController;
}

に置き換えるlocalizedCompare:compare:、フェッチ エラーは発生しませんが、一部のインデックスの順序が間違っており、セクションが表示されません。

4

1 に答える 1

3

残念ながら、それ自体は解決策ではありません...

localizedCompare:ローカライズされた比較の独自の実装を使用して、フェッチ要求から SQLite でサポートされた永続ストアに返される結果と同じ結果は返されません。これは、「珍しい」キャラクターに関しては特に顕著です。

アイスランド語やスカンジナビア語の多くの文字がそうであるように、文字Æもシステムにレンチを投げ込むものです。私はこの問題に対して 2 年間頭を悩ませてきましたが、役に立ちませんでした。

それ以外の場合は、これらの「異常な」文字が存在しない限り、うまく機能します. 私の回避策は、エラーを検出し、 に設定sectionNameKeyPathしてからnil、再フェッチを強制することでした。理想的でも効率的でもありませんが、ユーザーが何も見えないよりはましです。

于 2013-08-14T19:16:18.810 に答える