Проблемы с сортировкой JSONkit - PullRequest
0 голосов
/ 30 октября 2011

Я использую веб-сервис на основе REST для получения данных.Независимо от структуры документа JSON, NSDictionary заполняется одинаково.Я хочу, чтобы сортировка сохранялась при возвращении веб-службы.

Вот мой код:

-(void) getData
{
    NSURL *url = [NSURL URLWithString:@"http://somewebservice"];
    __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request setCompletionBlock:^{
        // Use when fetching text data
        NSString *responseString = [request responseString];

        NSDictionary *resultsDictionary = [responseString objectFromJSONString];


            [jokesArray release];
            jokesArray = [resultsDictionary allValues]; //always has the same order. 

            [jokesArray retain];


            [self.tableView reloadData];





        // Use when fetching binary data
  //      NSData *responseData = [request responseData];
    }];
    [request setFailedBlock:^{
        NSError *error = [request error];

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"An error occured" 
                                                        message:[error description]
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];
    }];
    [request startAsynchronous];
}

Ответы [ 2 ]

2 голосов
/ 30 октября 2011

Записи в NSDictionary не имеют собственного порядка;они не отсортированы по определению.То же самое верно для массива, возвращаемого allValues, как ясно сказано в документации:

Порядок значений в массиве не определен.

Вам нужно будет отсортировать массив впоследствии.Если вы хотите сохранить тот же порядок сортировки, что и в источнике JSON, вам придется анализировать данные JSON вручную и извлекать значения из словаря один за другим.Или, если вы знаете, как сортируются данные JSON, просто примените тот же алгоритм сортировки к массиву, возвращаемому allValues.

1 голос
/ 05 мая 2012

Вы не должны использовать словарь JSON для хранения вещей, порядок которых имеет значение. Как говорит http://json.org/

Объект - это неупорядоченный набор пар имя / значение.

...