我無法圍繞如何使用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
這樣的對象那種與@
開頭的鍵,例如將在以r
開頭的任何密鑰之前出現,例如@home
。 radical
,並且這將再次出現在以a
開始的任何密鑰之前,例如, anything
。
以上只是一個例子。關鍵是要啓用完全的任意排序。
這是用於NSFetchedResultsController。
//代碼使用sortAlgorithm的代碼是什麼樣子?
編輯:
代碼是圍繞我試圖實現一個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-not-getting-called#comment5314586_4795667 –