NSSortdescriptor неэффективен при получении результата из NSManagedContext
Я пытаюсь отсортировать результат NSFetchRequest, используя NSSortdescriptor, используя ключ, указывающий на значение NSDate. Мои результаты выборки получаются абсолютно случайными без какой-либо ясной причины.
NSManagedObjectContext, который я использую, обновляется сохранением из вложенного дочернего контекста, созданного на подклассе NSOperation. Я знаю, что все это сделано успешно, потому что я могу получить все необходимые данные из родительского (основного) контекста. Получение из него просто не будет сортировать по дате!
Странная вещь; Предикаты для выбора сущностей (называемых "Tweet") между двумя датами работают просто отлично!
Вот некоторый код, иллюстрирующий мою проблему:
<code>NSSortDescriptor* timeDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"time" ascending:NO selector:@selector(compare:)]; NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Tweet"]; [request setSortDescriptors:[NSArray arrayWithObjects:timeDescriptor, nil]]; NSPredicate* predicate = [NSPredicate predicateWithFormat:@"((time >= %@) AND (time <= %@))",startDate,endDate]; [request setPredicate:predicate]; NSManagedObjectContext* context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; [context setParentContext:[[NSApp delegate] managedObjectContext]]; [context performBlock:^{ NSError* error = nil; NSArray* results = nil; results = [context executeFetchRequest:request error:&error]; // Results here are not ordered correctly // 2nd try sorting results using fetched array (works!) results = [results sortedArrayUsingDescriptors:[NSArray arrayWithObjects:timeDescriptor, nil]]; // This works too but not needed anymore /*results = [results sortedArrayUsingComparator:^(id obj1, id obj2) { Tweet* tweet1 = (Tweet*)obj1; Tweet* tweet2 = (Tweet*)obj2; //return [tweet1.time compare:tweet2.time]; // ascending return [tweet2.time compare:tweet1.time]; // descending }];*/ if ([results count] > 0) { for (uint i = 0; i < [results count]; i++) { Tweet* tweet = [results objectAtIndex:i]; NSDate* date = Tweet.time; NSLog(@"tweet date: %@", date); } } }]; </code>
Кто-нибудь может сказать мне, почему NSSortDescriptor не работает для моих выборок?
Спасибо!
-- Обновить --
Кажется, что NSSortDescriptor работает нормально, когда я выбираю из основного (родительского) managedObjectContext в основном потоке без использования метода executeBlock. Это по-прежнему не помогает мне делать сортированные выборки для NSPrivateQueueConcurrencyType managedObjectContext. Создание NSFetchRequest, NSSortDescriptor и NSPredicate внутри executeBlock также не решает проблему.