#iphone #cocoa-touch #core-data #uitableview
#iPhone #cocoa-touch #core-данные #uitableview
Вопрос:
Я реализовал UItable с данными, полученными через Core Data. Таблица работает нормально и правильно отображает данные, детализирует .. и т.д.
Однако у него есть следующая проблема: он каждый раз представляет данные содержимого в другом порядке. Я бы хотел, чтобы они, по крайней мере, отображались последовательно или даже лучше в алфавитном порядке.
Есть идеи о том, почему это может происходить, или о конкретном свойстве или методе, которые я должен рассмотреть в документации?
Помощь высоко ценится
Ответ №1:
Вам нужно установить NSSortDescriptor в вашем запросе Nsfetch
NSSortDescriptor *sortDescriptorName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptorName]];
Затем создайте свой NSFetchedResultsController с fetchRequest
объектом.
Это приведет к тому, что ваш список будет отображаться отсортированным в алфавитном порядке с использованием свойства «name» и игнорироваться регистр при сортировке.
Ответ №2:
Вы можете просто добавить дескриптор сортировки к запросу. В этом примере объект data имеет числовой столбец для «SortOrder», но вы могли бы сортировать практически по чему угодно.
- (NSMutableArray *)loadData {
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"NameOfEntity" inManagedObjectContext:context];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortOrder" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[context executeFetchRequest:request error:amp;error] mutableCopy];
if (mutableFetchResults == nil) {
// Handle the error.
}
[request release];
return [mutableFetchResults autorelease];
}
Ответ №3:
Я мало что сделал с CoreData, кроме как прочитать об этом и просмотреть несколько примеров, но я бы сказал так:
Похоже, что ваши данные просто выводятся из CoreData несортированными, и порядок фактически не гарантируется, ЕСЛИ вы не предоставите какой-либо дополнительный намек на то, как вы хотели бы, чтобы они были отсортированы, скажем, с помощью дескриптора сортировки или чего-то еще.
Извините, я не могу предоставить конкретную ссылку, но должен быть способ как извлекать данные, так и указывать порядок, в котором они возвращаются.
В качестве альтернативы, вы могли бы (за кулисами) извлечь все табличные данные из CoreData, а затем отсортировать их самостоятельно, но я думаю, что это сводит на нет цель использования CoreData в первую очередь и отбрасывает большую часть функциональности CoreData, которая, вероятно, более эффективна, чем все, что вы могли бы написать самостоятельно для обработки данных.