2011-12-23 4 views
1

私は、最小限のiOS 4.3を必要とするプロジェクトでコアデータを実装しようとしています。私は、コードはiOSの5に何の問題もなく仕事を得るが、iOSの4.3とそれをしようとしたときには、以下の理由でクラッシュ:ここNSFetchRequestControllerはiOS5で動作し、iOS4.3でクラッシュします。

Unresolved error Error Domain=NSCocoaErrorDomain Code=134060 "The operation couldn’t be completed. (Cocoa error 134060.)" UserInfo=0x4fb59b0 {reason=The fetched object at index 4 has an out of order section name 'Å. Objects must be sorted by section name'}, { 
reason = "The fetched object at index 4 has an out of order section name '\U00c5. Objects must be sorted by section name'"; 

は私のコードです:

- (NSFetchedResultsController *)fetchedResultsController 
{ 
if (__fetchedResultsController != nil) { 
    return __fetchedResultsController; 
} 

// Set up the fetched results controller. 
// Create the fetch request for the entity. 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
// Edit the entity name as appropriate. 

fetchRequest.entity = [NSEntityDescription entityForName:@"Exhibitor" 
            inManagedObjectContext:self.managedObjectContext]; 

// Edit the sort key as appropriate. 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" 
                   ascending:YES 
                   selector:@selector(caseInsensitiveCompare:)]; 

fetchRequest.sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; 

// Edit the section name key path and cache name if appropriate. 
// nil for section name key path means "no sections". 
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] 
                 initWithFetchRequest:fetchRequest 
                 managedObjectContext:self.managedObjectContext 
                 sectionNameKeyPath:@"firstLetter" 
                 cacheName:nil]; 
aFetchedResultsController.delegate = self; 
self.fetchedResultsController = aFetchedResultsController; 

NSError *error = nil; 
if (![self.fetchedResultsController performFetch:&error]) { 
    /* 
    Replace this implementation with code to handle the error appropriately. 

    abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
    */ 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} 

    return __fetchedResultsController; 
} 

I私の中にいる場合sortDesctriptor localizedCaseInsensitiveCompareの代わりにcaseInsensitivecompareを使用することを選択します。クラッシュはしませんが、順序が間違っています(AとOの後にはÅÄÖが必要です)。

提案?

UPDATE: 私はマルチタスクバーに私のアプリを殺すし、それを再起動するときのように思える、AAOとの順序が正しい(caseInsensitiveCompareを使用)。しかし、最初に再起動した後でなければなりません。最初の打ち上げ時にまだ間違っています...

答えて

1

セクションインデックスタイトルを使用していますか?これは、このエラーが参照しているようです。

単純に追加します。

-(NSString *)controller:(NSFetchedResultsController *)controller 
      sectionIndexTitleForSectionName:(NSString *)sectionName { 
    return sectionName; 
} 

をあなたのテーブルビューコントローラに。

+0

これはlocalizedCaseInsensitiveCompareで実際に問題を解決しませんでしたが、caseInsensitiveCompareで間違った順序を解決しました。それは勝利です!とにかく私のアプリはスウェーデン語でしかローカライズされていないので、それ自体を解決するようです。ありがとう。 – Nings

関連する問題