NSSortDescriptorで任意のソートを行う方法を頭で囲むことはできません。NSSortDescriptorで任意の並べ替えを使用する
私はこのような何かをしたい:
NSArray *sortAlgorithm = [NSArray arrayWithObjects:@"@", @"#", @"!", @"&", @"r", @"a", nil];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name"
ascending:YES
comparator:
^(id obj1, id obj2) {
NSComparisonResult comparisonResult;
//Some code that uses sortAlgorithm.
return comparisonResult;
}
];
@
から始まる任意のキーように、これはキーname
でオブジェクトを並べ替えるだろう、例えば@home
は、r
で始まる任意のキーの前に来ます。 radical
であり、それはa
で始まる任意のキーの前に来るでしょう。 anything
。
上記は単なる例です。ポイントは、完全に任意のソートを可能にすることです。
これは、NSFetchedResultsControllerに使用されます。
のコードは何ですか// sortAlgorithmを使用しているコードはいくつかありますか?
EDIT:PRとして、sortDescriptorを実装する私の試みを取り巻く
コード。 occulus'
提案:
- (NSFetchedResultsController *)fetchedResultsController {
if (__fetchedResultsController)
return __fetchedResultsController;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = [NSEntityDescription entityForName:@"Tag" inManagedObjectContext:self.temporaryManagedObjectContext];
//NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO comparator:^(id obj1, id obj2) {
NSArray *sortAlgorithm = [NSArray arrayWithObjects:@"#", @"!", @"@", @".", nil];
NSString *obj1FirstChar = [(NSString *)obj1 substringToIndex:1];
NSString *obj2FirstChar = [(NSString *)obj2 substringToIndex:1];
int idx1 = [sortAlgorithm indexOfObject:obj1FirstChar];
int idx2 = [sortAlgorithm indexOfObject:obj2FirstChar];
if (idx1 < idx2)
return NSOrderedAscending;
else if (idx1 > idx2)
return NSOrderedDescending;
else
return NSOrderedSame;
}];
fetchRequest.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
fetchRequest.fetchBatchSize = 20;
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.temporaryManagedObjectContext sectionNameKeyPath:nil cacheName:@"Tags"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[self.fetchedResultsController performFetch:nil];
return __fetchedResultsController;
}
コメントアウトsortDescriptor作品。
エンティティ "タグ"のオブジェクトには、確かにname
というプロパティがあります。しかし、そうでない場合でも、それは問題ではないようです。 Xcodeはそのコード行(sortDescriptor)をコンパイルしているようではないようですが、それはばかげて聞こえます。ブレークポイントは正常に動作していますが、その特定のコード行を破ることはありません。
最近同じ問題が発生しました。私は最後にDon's * theory *を購入しました:http://stackoverflow.com/questions/4789782/nsfetchedresultscontroller-custom-sort-notgetting-called#comment5314586_4795667 –