Добавить объекты в словарь, созданный 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. Вы можете использовать связанные объекты для хранения данных.

  • iOS JSON Parse в NSDictionary, а затем NSArray с SBJson
  • Ошибка анализа IOS JSON
  • Массив разбора мантий
  • Как загрузить приложение с локальными данными и впоследствии обновить его в Интернете.
  • разбор HTML в swift
  • Как исправить этот строковый формат в iOS?
  • Есть ли способ передать PFFile (изображение) другому контроллеру и отобразить его без запроса базы данных в новом контроллере?
  • Связывание запроса PFRelation для конкретного пользователя в Parse
  • SCXML-анализ IOS
  • как я могу разобрать строку ответа xml?
  • Анализ HTML-сайта на выделенном сервере вместо того, чтобы делать это на мобильном телефоне
  • Interesting Posts

    UIWebView не отображает клавиатуру при фокусировке на текстовом поле при второй загрузке

    Как создать segue в iOS без связанного с ним элемента интерфейса

    Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException» в моей «игре»

    Как я могу показать консоль симулятора iPhone на устройстве, например iPhone?

    Является ли платформа Entity Framework более подходящей для небольших настольных приложений?

    Как я могу использовать 3D Touch в своем приложении? (IOS 10)

    Основные данные и NSUndoManager – Порядок удаления / вставки с отменой

    Быстрый уровень быстрой настройки «Быстрый» вызывает крах из-за недоразвития

    запуск iphone только приложение на ipad (режим 1x / 2x) из ландшафта игнорирует настройку ориентации корневого представления

    Не удается закрыть страницу лидеров игрового центра

    Как безопасно перебирать измененный массив при его изменении?

    Прочитать получение в приложении чата iOS XMPP

    Помогает ли Beta Crashlytics поддерживать ресурсы iOS по требованию?

    Почему мой WebView не загружает новый контент?

    Правильное использование готового: в setAnimationDidStopSelector :?

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