Приведите NSDictionary в качестве изменчивого - PullRequest
1 голос
/ 05 октября 2011

У меня есть приложение для iPhone, которое использует API. Среди вызовов API есть один, который возвращает словарь JSON с 3 массивами, каждый из которых содержит набор словарей.

Вот как я его использую:

NSMutableDictionary * allthethings [self FetchAllTheThings]; // Returns the big dictionary

NSMutableArray * oneofthethings = [NSMutableArray arrayWithArray: [allthethings valueForKey:@"First"]];

и т. Д. И т. Д.

Затем, когда я перебираю массив «oneofthethings» и устанавливаю новое значение для одного из диктов, я получаю SIGABRT, предположительно, потому что содержащиеся в нем словари не являются изменяемыми.

Итак, мой вопрос заключается в следующем: есть ли способ сортировки массива для хранения их как изменяемых файлов? Или мне придется пройтись по нему и скопировать каждый словарь в изменчивый аналог?

Ответы [ 4 ]

4 голосов
/ 05 октября 2011

Да, вам придется пройтись по изменяемой коллекции и сделать все ее члены изменяемыми. Я бы посоветовал вам изменить ваш метод FetchAllTheThings, чтобы он возвращал коллекцию, члены которой уже изменяемы.

2 голосов
/ 05 октября 2011

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

2 голосов
/ 05 октября 2011

Я думаю, вам нужно создать изменяемую копию.Nsdictionary имеет метод mutableCopy, чтобы упростить его, но вы можете представить, что это будет неэффективно, если вызывать много

0 голосов
/ 08 ноября 2015

NSMutableDictionary от NSDictionary


Пример: Используйте метод mutableCopy на вашем NSDictionary

NSMutableDictionary *YOUR_MUTABLE_COPY = [YOUR_ORIG_DICT mutableCopy];

Пример: Добавить / изменить ключ и объект в нем

[YOUR_MUTABLE_COPY setObject:someObject forKey:@"someKey"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...