Метод мутации отправлен на неизменный объект - PullRequest
3 голосов
/ 04 августа 2011

Я использую JSONKit для анализа строки JSON, возвращенной с моего сервера, в приложении для iPhone.Часть ответа сервера - это пара изображений в кодировке Base64, которые я хочу декодировать в реальные изображения и добавить к объекту, который создает анализатор.Проблема в том, что я не могу понять, какой класс возвращает анализатор и, следовательно, какие методы можно использовать для взаимодействия с объектом.Я искал в документации JSONKit ответы на мой вопрос, но не нашел его.

decodedData = [[request responseString] objectFromJSONString];

int i = 0;
[Base64 initialize];
for (NSString *base64String in [decodedData valueForKey:@"base64String"]) {
    UIImage *image = [UIImage imageWithData:[Base64 decode:base64String]];
    [decodedData setValue:image forKey:@"image"];
    i++;
}

Этот код помещается в метод, который вызывается при успешном выполнении запросазакончен и ответ возвращается в [request responseString] (JSON).Класс объекта decodedData определен в заголовочном файле.Независимо от того, что я объявляю как (NSArray, NSMutableArray, NSDictionary или NSMutableDictionary), я получаю ту же ошибку при запуске кода (он прекрасно компилируется), а именно:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '*** -[JKDictionary setObject:forKey:]: mutating method sent to immutable object'

Кто-нибудь может мне сказать, что это за класс, и что я должен сделать, чтобы добавить к нему изображение, декодированное Base64?

Я довольно новичок в Objective-C, поэтомупотерпи меняСпасибо.

1 Ответ

9 голосов
/ 04 августа 2011

Вы пытаетесь изменить неизменный JKDictionary (сам прокси для неизменяемого объекта NSDictionary).

В документации, на которую вы ссылались, указывается метод экземпляра в NSString с именем - (id)mutableObjectFromJSONString;, это даст вам изменяемый объект словаря, с которым вы можете играть, если захотите.

...