Добавить объекты в словарь, созданный JSONKit?

В моем проекте мне нужно загрузить несколько json-файлов. Я разбираю их с JSONKit и после каждого синтаксического анализа

NSMutableDictionary *json = [myJSON objectFromJSONString]; 

Я добавляю их в массив вроде:

 [self.themeArray addObject:json]; 

Пока это прекрасно. Теперь мне нужно передать словари arround между представлениями. До сих пор работает, но мне нужно добавить еще несколько объектов в объект-словарь -> json. Даже это я объявил json как NSMutableDictionary, он не позволяет мне добавлять объекты, поскольку кажется, что парсер JSONKit создает непеременные словари.

Я думал о создании объекта, который содержит json-словарь и мои дополнительные данные бок о бок, поэтому мне не пришлось бы менять словарь json. Я мог бы даже изменить его на NSDictionary, потому что нет необходимости его менять. Но это кажется мне не очень элегантным.

Вы знаете, как я могу решить эту проблему, не меняя JSONKit lib?

Заранее спасибо!

РЕДАКТИРОВАТЬ

я просто попытался изменить свой код на

 NSMutableDictionary *json = [[myJSON objectFromJSONString] mutableCopy]; 

что-то вроде этого

 [[self.theme objectForKey:@"theme"] setObject:sender forKey:@"sender"]; [[self.theme objectForKey:@"theme"] setValue:sender forKey:@"sender"]; 

Xcode выдает исключение:

* Завершение приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: '* – [JKDictionary setObject: forKey:]: метод мутирования, отправленный в неизменяемый объект'

Я предполагаю, что это связано с тем, что в высшем словаре все еще есть вложенные словари. Тогда мне пришлось бы взаимодействовать через мой объект json, чтобы скопировать все словари в изменяемые словари, не так ли?

Возможно, лучше переключиться на NSJSONSerialization, как предложил Гийом.

РЕДАКТИРОВАТЬ

Я просто попробовал что-то вроде этого

 [self.theme setValue:sender forKey:@"sender"]; 

И это работает сейчас! Это было так, как я полагаю. Только объект json был скопирован в изменяемый объект. Наверное, очевидно, для меня это было не для меня.

Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ

Наконец, я снова сменил свой код после того, как мне не удалось изменить все объекты в глубине моих данных словаря на изменяемые объекты. Я выбросил JSONKit и теперь использую NSJSONDeserialization в качестве рекомендации здесь с опцией NSJSONReadingMutableContainers. Теперь мой код выглядит так, и все контейнеры (массивы и словари) тоже изменяются внутри. Это делает меня счастливым! 😉

 NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:myJSON options:NSJSONReadingMutableContainers error:&jsonParsingError]; 

Вы всегда можете создавать изменяемые версии объектов из своих не изменяемых копий, копируя их.

 NSMutableDictionary* json = [[myJSON objectFromJSONString] mutableCopy]; 

Это не оптимально, но копирование меньших словарей обычно не замечается с точки зрения производительности.

Даже это я объявил json как NSMutableDictionary, он не позволяет мне добавлять объекты, поскольку кажется, что парсер JSONKit создает непеременные словари.

Какой тип объявляется переменной, ничего не значит. Вы могли бы объявить json как NSNumber и это не сделало бы NSNumber .

Вам нужно сделать изменяемую копию словаря (с mutableCopy ), чтобы получить NSMutableDictionary .

У меня есть три идеи для вас.

  1. Создайте реальные объекты модели данных и сохраните их в своем массиве. Используйте словарь JSON для инициализации вашего объекта.
  2. Храните объекты NSMutableDictionary в вашем массиве. Передайте словарь JSON в словарь +[NSMutableDictionary dictionaryWithDictionary:] чтобы инициализировать NSMutableDictionary. Другие предложили позвонить -[NSDictionary mutableCopy] в словаре JSON, чтобы сделать то же самое.
  3. Создайте категорию на основе NSDictionary, в которой хранятся дополнительные данные.

ЗАМЕТКИ:

Обычно создание классов для представления ваших данных считается лучшим вариантом, но это также самый большой объем работы на фронте. В основном вы торгуете больше перед началом работы над большим количеством работ по техническому обслуживанию, поскольку стараетесь поддерживать содержание словарей.

Хранение изменяемого словаря – это именно то, о чем вы, похоже, просите, но может быть много работ, чтобы найти все места, где словари JSON добавляются в массив и заменяя их новым вызовом.

Создание категории для NSDictionary означает, что вам не нужно изменять какой-либо из ваших текущих кодов, но требует, чтобы сопровождающие понимали, как вы улучшили NSDictionary. Кроме того, это поможет разделить ваши изменения с исходным анализируемым JSON. Вы можете использовать связанные объекты для хранения данных.

  • SCXML-анализ IOS
  • Хорошая библиотека KML на iOS
  • Анализ HTML-сайта на выделенном сервере вместо того, чтобы делать это на мобильном телефоне
  • Swift 2 сохраните несколько изображений в Parse
  • JSON NSURLRequest с полномочиями
  • stringByReplacingOccurrence не заменяет строку
  • Как я могу найти следующий выходной Swift
  • Разбор json в iOS и добавление значений в массив объектов
  • Objective-C + JSON Parse objectForKey для API Google Адресов
  • Objective-C добавить к строке, не работающей NSXMLParser
  • JSON синтаксический анализ iOS
  • Interesting Posts

    Этот пакет недействителен. Новые обновления приложений и приложений, представленные в хранилище приложений, должны быть построены с помощью xcode 5 и ios 7 sdk

    Как получить доступ к объективному протоколу c из класса swift

    Регулировка высоты / ширины UIWebview в Swift

    iOS – Firebase – Как зарегистрироваться в facebook для уже зарегистрированных по электронной почте

    Использование ObjC RestKit библиотеки, как сопоставить объект с JSON NSString *

    Этот код отлично работает на armv7 (32 бит), но не на arm64 (64 бит)

    Поле ошибки CLLocationManager

    Невозможно перегрузить функцию в viewDidLoad () в swift

    Создайте линии сетки и разрешите пользователю отображение линии сетки вкл / выкл

    Сообщение об ошибке при определении структуры

    Данные привязки RxSwift к утечке памяти UIButton

    Создайте каталог и сохраните файлы внутри него в Swift

    CGBitmapContextCreate дает EXC_BAD_ACCESS в iPhone 6+

    Xcode 6.1 Распределение iOS всегда отменяется или отсутствует

    Воспроизведение нескольких аудио одновременно

    Давайте будем гением компьютера.