2012-06-02 3 views
4

У меня есть объект, содержащий различные объекты и переменные NSString, которые я вам NSCoding архивирует в файл на диске, а затем и unarchive. Пока все работает отлично.Кодирование NSMutableArray

Сегодня я хотел бы добавить NSMutableArray к объекту и пытался кодировать с помощью:

[encoder encodeObject:myArray ForKey:@"myArray"]; 

, а затем расшифровать его с помощью:

[self setMyArray:[decoder decodeObjectForKey:@"myArray"]]; 

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

Я уверен, что я делаю что-то совершенно неправильное здесь, но не совсем уверен в чем. Я думаю, возможно, это может иметь какое-то отношение к ней, которое не будет правильно распределено во время разборки.

Что-нибудь выглядит явно очевидным как источник проблемы?

+0

возможно дубликат [NSKeyedArchiver и NSKeyedUnarchiver с NSMutableArray] (http://stackoverflow.com/questions/10391803/nskeyedarchiver-and -nskeyedunarchiver-with-nsmutablearray) – Caleb

+1

Согласен. Это, по сути, та же проблема. Я не осознавал этого, когда создал его. Честно говоря, я забыл, что раньше у меня была аналогичная проблема! Из этих двух я считаю, что этот вопрос гораздо более краткий и имеет простой прямой ответ, в то время как вариация от нескольких недель назад более детальная и включает в себя другие связанные с этим проблемы, которые могут вызвать эту проблему. Спасибо всем, кто помог обоим! :) –

+0

Ha! Я даже не заметил, что вы задали дублированный вопрос. ;-) – Caleb

ответ

10

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

Декодирование архива дает неизменные объекты независимо от того, являются ли они изменяемыми или неизменяемыми при их кодировке. Вы не делаете ничего особенного - он работает как рекламируемый.

См this answer для другого примера подобной проблемы, и раствор:

[self setMyArray:[[decoder decodeObjectForKey:@"myArray"] mutableCopy]; 
+1

Я бы сказал, что вы отправили его по почте. По-видимому, у меня полный день Noob. Я должен был это увидеть ... Тем более, что «аналогичная проблема» была одной из моих из другого дня Нооба несколько недель назад. Если бы я мог, я бы дал вам двойные авансы ... Просто для того, чтобы быть терпеливым и указывать мне на ответ, который мне уже дали. ::: slaps forehead ::: –

+0

Hm .... сделал изменения (мой NSKeyedUnarchiver был установлен в RETAIN ... Я изменил это на mutableCopy, и я добавил mutableCopy в мой метод декодирования массива), и он все еще сбой когда я пытаюсь добавить Object: в массив ... но только после unarchiving. Есть идеи? –

+0

Убедитесь, что массив, к которому вы пытаетесь добавить объект, является допустимым, изменяемым массивом. Убедитесь, что объект, который вы добавляете, действителен. Если они оба в порядке, не должно быть проблем с добавлением объекта. – Caleb

Смежные вопросы