порядок iphone массива json - PullRequest
0 голосов
/ 28 июля 2011

У меня есть приложение для iPhone, которое получает строку json с сервера и анализирует ее.Он содержит некоторые данные, например, информацию о школьном расписании.Данные сохраняются в обязательном порядке, а затем передаются в массив nsmuttablearray.например,

Может ли кто-нибудь указать мне правильное направление / сказать, как я могу получить доступ к различным «корням» массива?Я хочу сохранить элементы с полем «День» как «Понедельник» (или, может быть, вы можете сказать мне, как я могу отсортировать / выполнить поиск по ним).Потратил довольно много времени, пытаясь найти некоторую информацию об этом (как получить доступ / изменить вложенные значения), но не повезло = /.спасибо ..

Ответы [ 3 ]

1 голос
/ 28 июля 2011

Лучшим вариантом для доступа ко всем объектам словаря с Day = Monday будет использование предиката с ключевым путем к тому, что вы ищете ...

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"Day == 'Monday'"];
NSArray* mondayCourses = [rows filteredArrayUsingPredicate:predicate];

Вы также можете сделать предикат динамическим.

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"Day == %@", dayOfTheWeek];

где dayOfTheWeek может быть строкой NSS, которая содержит текущий день недели в цикле и т. Д.

Если вы хотите отсортировать массив, вы можете сделать это с помощью дескрипторов сортировки.

NSSortDescriptor* idSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"id" 
                                                                   ascending:YES];
NSSortDescriptor* levelSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"Level" 
                                                                      ascending:YES];
NSArray* sortedMondayRows = [mondayRows sortedArrayUsingDescriptors:[NSArray arrayWithObjects:idSortDescriptor, levelSortDescriptor, nil]];
0 голосов
/ 28 июля 2011

Начните с просмотра документации Apple по NSArray и NSDictionary . В этом случае, похоже, что массив (NSArray) содержит несколько NSDictionaries.

Данные сохраняются в обязательном порядке, а затем передаются в массив nsmuttablearray.

Во-первых, я должен отметить, что переменные в Objective-C являются просто указателями. Когда у вас есть такая строка:

NSMutableArray *rows;

Вы только говорите: «Я ожидаю, что эта переменная будет указывать на NSMutableArray». Это в значительной степени эквивалентно,

id rows;

… и вы не будете останавливаться во время выполнения от помещения обычного массива в переменную, которая была объявлена ​​для изменяемых массивов (или от помещения строки в переменную, которая была объявлена ​​для словаря!). Это будет работать! Но ваша программа аварийно завершит работу, когда вы попытаетесь сделать изменяемые объекты в неизменяемом массиве или словарь в строке.

Объявление его как указателя на NSMutableArray вместо id имеет несколько преимуществ:

  • Это позволяет XCode помочь вам с помощью автозаполнения имен методов
  • Это позволяет компилятору предупреждать вас, когда вы пытаетесь вызвать методы, которых нет у NSMutableArray

Итак, даже если ваша переменная объявлена ​​как NSMutableArray *rows, в этой строке:

rows = [[dict objectForKey:@"courses"] retain];

… если объект «курсы» не был изменяемым, то то, что у вас есть в rows, тоже не является. Вместо этого вы можете сделать это:

rows = [[dict objectForKey:@"courses"] mutableCopy];

… чтобы получить собственную копию массива NSMutableArray (которую вы должны выпустить, как если бы вы сохранили оригинал).


Вы исследуете массив и словари со стандартным кодом Какао. Вот один из способов получить все курсы «понедельника»:

NSMutableArray *mondayCourses = [NSMutableArray array];

for (NSDictionary* course in rows){
    if([[course objectForKey:@"Day"] isEqual:@"Monday"]){
        [mondayCourses addObject:course];
    }
}

(Внимание, я не запускал этот код.)

0 голосов
/ 28 июля 2011

Проверьте правильность вашего JSON в URL: http://jsonlint.com/. Если это правильно, чем читать о том, как анализировать JSON-файл путем поиска в Google. Используете ли вы какие-либо конкретные рамки для анализа файлов JSON?

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