Добавить объекты в словарь, созданный 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
  • Как я могу найти следующий выходной Swift
  • Поиск первой буквы в NSString и подсчет назад
  • Заменить вкладку в NSString с помощью \ t
  • ParseKit: ошибка утверждения для грамматики, содержащей обратную косую черту
  • Swift 2 сохраните несколько изображений в Parse
  • Как добавить объекты в массив по определенному индексу в блоке завершения асинхронизации с помощью Swift
  • разбор HTML в swift
  • JSON синтаксический анализ iOS
  • Есть ли способ передать PFFile (изображение) другому контроллеру и отобразить его без запроса базы данных в новом контроллере?
  • Как загрузить приложение с локальными данными и впоследствии обновить его в Интернете.
  • Interesting Posts

    Как представить модальное представление как лист формы непосредственно без какой-либо анимации

    Обнаруживать стук / хлопок для iPhone / iPad

    In-App Purchase – авто-возобновляемая подписка демо?

    Не удалось прочитать значения в CFPrefsPlistSource, когда я получаю доступ к основным данным с группой приложений

    Как вызвать UICollectionView, встроенный в жесты салфетки, из режима «Жест» в представлении? (желательно в быстрой)

    Как загрузить картинку с помощью Phonegap Filetransfer в галерею изображений в iOS

    Как правильно выбрать пользователя, когда выбор слишком сложный, чтобы использовать UIAlertView

    UIScrollViewDelegate – animateWithDuration в scrollViewDidEndDragging работает не так, как ожидалось

    Изменение NSPersistentStoreFileProtectionKey для постоянного менеджера хранилища на существующем sqlite

    Почему метод MKStoreKit isSubscriptionActive всегда возвращает NO?

    Исключения для безопасности транспорта приложений IOS9

    Проблема подключения UIWebView IBOutlet

    Как я могу одинаково взглянуть на все мои UITableViews через мое приложение?

    SceneKit 3D Marker Увеличенная реальность iOS

    Не удалось получить дату Hijri из UIDatePicker в ios Objective C?

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