0

言語をフランス語として選択した空のリストしか表示されません。以下はそれに関連するコードです。

+ (NSFetchedResultsController *)fetchedResultsControllerForAirportTranslationsInLanguage:(NSString *)theLanguage inContext:(NSManagedObjectContext *)moc_ {
NSLog(@"language is %@",theLanguage);
NSFetchedResultsController *fetchedResultsController = nil;

AirportTranslationFetchRequest *request = [[AirportTranslationFetchRequest alloc] initWithLanguage:theLanguage inManagedObjectContext:moc_];

NSSortDescriptor *sortDescriptorCity = [[NSSortDescriptor alloc] initWithKey:@"city" ascending:YES];
NSSortDescriptor *sortDescriptorName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorCity, sortDescriptorName, nil];
[request setSortDescriptors:sortDescriptors];

fetchedResultsController = [[[XXXGMFetchedResultsControllerDoubleByte alloc] initWithFetchRequest:request managedObjectContext:moc_ sectionNameKeyPath:@"firstLetterOfCity" cacheName:nil] autorelease];
[sortDescriptorCity release];
[sortDescriptorName release];
[sortDescriptors release];
[request release];

NSError *error = nil;
if (![fetchedResultsController performFetch:&error]) {
    LogError(@"An error occured while performing fetch request: %@", error);
}

return fetchedResultsController;

}

中国語、日本語、韓国語など、他のすべての言語で問題なく動作します。

- (NSString *)firstLetterOfCity {
[self willAccessValueForKey:@"firstLetterOfCity"];

NSString *aString = [[self valueForKey:@"city"] uppercaseString];

NSLog(@"ABCD %@",aString);

NSString *stringToReturn = nil;
if (aString.length < 1) {
    stringToReturn = @"?";
}
else {
    stringToReturn = [aString substringToIndex:1];
}

[self didAccessValueForKey:@"firstLetterOfCity"];

return stringToReturn;

}

以下のログによると、Core Data は特にフランス語の特殊文字を処理できないと思います。

2015-03-27 11:51:17.543 XXX[1503:60b] 義烏市

2015-03-27 11:51:17.543 XXX[1503:60b] シティ ジョグジャカルタ

2015-03-27 11:51:17.544 XXX[1503:60b] 米子市

2015-03-27 11:51:17.544 XXX[1503:60b] 都市ユジノサハリンスク

2015-03-27 11:51:17.545 XXX[1503:60b] シティ ザダル

2015-03-27 11:51:17.545 XXX[1503:60b] シティ ザグレブ

2015-03-27 11:51:17.546 XXX[1503:60b] 都市ザンジバル

2015-03-27 11:51:17.547 XXX[1503:60b] 張家界市

2015-03-27 11:51:17.547 XXX[1503:60b] 都市鄭州

2015-03-27 11:51:17.548 XXX[1503:60b] 市珠海

2015-03-27 11:51:17.548 XXX[1503:60b] シティ チューリッヒ

2015-03-27 11:51:17.549 XXX[1503:60b] シティ ラシ

2015-03-27 11:51:17.549 XXX[1503:60b] CoreData: エラー: (XXXGMFetchedResultsControllerDoubleByte) インデックス 1025 でフェッチされたオブジェクトには、順序が正しくないセクション名 'Z. オブジェクトはセクション名でソートする必要があります' 2015-03-27 11:51:17.553 XXX[1503:60b] +[XXXGMAirportTranslation fetchedResultsControllerForAirportTranslationsInLanguage:inContext:][69 行目] [エラー] フェッチ要求の実行中にエラーが発生しました: エラー ドメイン = NSCocoaErrorDomain Code=134060 "The operation could not be completed. (Cocoa error 134060.)" UserInfo=0x168429f0 {reason=インデックス 1025 のフェッチされたオブジェクトには、順序が正しくないセクション名 'Z. オブジェクトはセクション名でソートする必要があります'}

nil代わりに渡すfirstLetterOfCityとリストが表示されますが、ソートされていません。

4

1 に答える 1

0

このクラッシュは通常、セクション名とセクション インデックス タイトルが一致しない場合に発生します。

返されたセクション インデックス タイトル配列を確認し、セクションの見出しと比較します。

于 2015-03-27T13:29:34.810 に答える