Неизменяемые NSJSONReadingOptions в NSJSONSerialization

Чтобы десериализовать строку JSON, я использую следующий метод:

+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error

Но я обнаружил, что опция чтения возвращает изменяемый объект. Есть ли способ, с помощью которого я смогу получить неизменяемый объект?


person NNikN    schedule 15.11.2012    source источник


Ответы (2)


Вы должны получать изменяемые объекты, только если ваш параметр NSJSONReadingOptions включает NSJSONReadingMutableContainers. Действительно, когда я коллирую с options из 0, я получаю стандартный NSDictionary, но если я использую NSJSONReadingMutableContainers, я получаю NSMutableDictionary. Что вы используете для своего значения options?

person Rob    schedule 15.11.2012
comment
Я искал варианты стоимости, которые вы упомянули. 0 работает. Это где-то задокументировано. Спасибо. - person NNikN; 15.11.2012
comment
См. NSJSONReadingOptions. - person Rob; 15.11.2012
comment
но он не упоминает значение как 0 - person NNikN; 15.11.2012
comment
Согласованный. Остается сделать вывод, что если вы не выберете NSJSONReadingMutableContainers (который включает изменяемые контейнеры), то контейнеры, следовательно, неизменны. А поскольку это побитовый оператор, 0 означает, что ни один из вариантов не выбран. - person Rob; 15.11.2012
comment
@Rob Я немного запутался, зачем использовать параметр, которого нет в списке возможных значений, если нет документации, что он делает, я думаю, нам не следует полагаться на него, поскольку он может измениться в новых версиях iOS. - person Julian; 16.11.2015
comment
@JulianKról - Вы говорите о том, что 0/kNilOptions нет в списке? При работе с побитовыми операторами нулевой параметр никогда не включается в документацию Apple, но всегда подразумевается. (То же самое верно и для значения параметра [] в Swift 2.) - person Rob; 16.11.2015
comment
@ Роб, да, это то, что я имел в виду. Хорошо, я не пытаюсь угадать, почему они поддерживают 0, но я беспокоюсь о его последствиях, поскольку это недокументированное значение, поэтому я бы не стал его использовать. - person Julian; 16.11.2015

Для лучшей читабельности вы можете использовать kNilOptions вместо 0.

Из http://www.raywenderlich.com/5492/working-with-json-in-ios-5

... kNilOptions - это просто константа для 0 - хотя я нахожу его имя очень описательным, поэтому я всегда предпочитаю его просто значению 0 в качестве параметра метода.

person Struddie    schedule 22.02.2015