Основные данные: фоновая выборка, NSFetchedResultsController и время сортировки

, с которой я сталкиваюсь, заключается в следующем:

У меня есть UITableView , который я загружаю данными из NSFetchedResultsController , который извлекает около 6000 строк. из основных данных. fetchBatchSize из NSFetchRequest установлен на 20, и если я не применяю какой-либо NSSortDescriptor , выборка будет достаточно быстрой, чтобы не блокировать поток пользовательского интерфейса.

Однако, Мне действительно нужно отобразить эти строки, отсортированные в алфавитном порядке, для чего я использую следующий NSSortDescriptor:

[[[NSSortDescriptor alloc] initWithKey:@"optionText" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];

И вот, когда что-то изменилось, операция выборки теперь занимает около 3 секунд, потому что сортируются 6000 строк. Очевидно, в течение этих секунд пользовательский интерфейс заблокирован, и пользовательский интерфейс ужасен.

Я знаю, что могу выполнить выборку в фоновом потоке, а затем передать идентификаторы объектов в основной поток, но в этом случае как я могу использовать NSFetchedResultsController в основном потоке (я также использую его для наблюдения за изменениями данных)?

Я также проиндексировал атрибут, по которому я сортирую, но это только оптимизирует поиск, а не сортировка.

Любые идеи будут очень признательны, спасибо!

8
задан monchote 14 April 2011 в 09:43
поделиться