сортировка NSArray NSDictionaries с помощью NSSortDescriptor не работает - PullRequest
0 голосов
/ 26 марта 2012

У меня есть массив unsortedPosts, полный словарей, которые выглядят так, если я распечатываю содержимое в терминале:

{
    "created_at" = 1332584959;
    id = "61926802418418";
    network = "net1";
    text = "text1";
    url = "https://www.google.com";
},
{
    "created_at" = 1332581096;
    id = "6192689218418";
    network = "net1";
    text = "text1";
    url = "https://www.yahoo.com";
},
{
    "created_at" = 1332581074;
    id = "6192688628418";
    network = "net1";
    text = "text1";
    url = "https://www.aol.com";
}

Я хочу отсортировать их по полю created_at (unixметки времени).Я использую NSSortDescriptor следующим образом:

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"\"created_at\"" ascending:TRUE];
NSMutableArray *sortDescriptors = [NSMutableArray arrayWithObject:sortDescriptor];
NSArray *sortedSocialPosts;
sortedSocialPosts = [unsortedSocialPosts sortedArrayUsingDescriptors:sortDescriptors];

Но вывод не отсортирован.

Редактировать

Я пытался запустить его без использования экранированных кавычек вокруг created_at (за ответ @Eimantas):

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"created_at" ascending:TRUE];
NSMutableArray *sortDescriptors = [NSMutableArray arrayWithObject:sortDescriptor];
NSArray *sortedSocialPosts;
sortedSocialPosts = [unsortedSocialPosts sortedArrayUsingDescriptors:sortDescriptors];

Но яполучить эту ошибку:

-[__NSCFNumber length]: unrecognized selector sent to instance 0x6a2a3c0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0x6a2a3c0'

1 Ответ

3 голосов
/ 26 марта 2012

Вам не нужны экранированные кавычки, просто введите @"created_at" и все будет хорошо. Кавычки иногда печатаются при совершении вызовов NSLog(). Я уверен, что вы можете получить доступ к метке времени создания, просто нажав клавишу @"created_at" с помощью метода valueForKey:.

обновление

Это может означать, что некоторые значения created_at могут быть NSString экземплярами, а некоторые - NSNumber экземплярами. Можете ли вы подтвердить, что все значения create_at имеют одинаковый тип? (Используйте NSLog(@"%@", [[unsortedSocialPosts valueForKey:@"created_at"] valueForKey:@"class"]);.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...