2012-03-20 3 views
1

Я знаю, что есть много ресурсов о том, что здесь, но тем не менее, я не могу найти то, что происходит не так с моим кодом:Сериализация массив пользовательских объектов IOS

У меня есть уровень класса и два подкласса уровня: GameLevel и TransitionLevel. Каждый из этого класса реализует протокол NSCoding. Затем у меня есть массив уровня (поэтому он содержит оба класса GameLevel и TransitionLevel). Сохранение архива, кажется, работает нормально:

NSString *archivePath = [DOCUMENT_DIRECTORY stringByAppendingPathComponent:@"levels.archive"]; 
[NSKeyedArchiver archiveRootObject:levels toFile:archivePath]; 

Обратите внимание, что уровни - это массив, который я хочу сохранить. Я вижу файл, он создан и, кажется, содержит то, что он должен содержать. Но когда я хочу, чтобы получить этот массив:

NSString *archivePath = [DOCUMENT_DIRECTORY stringByAppendingPathComponent:@"levels.archive"]; 
levels = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath]; 

У меня это исключение:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil' 

Я не уверен, что я здесь отсутствует.

+0

Я не уверен, почему мои приветствия всегда удаляются, когда я отправляю сообщение. Так что привет :) – rmonjo

+0

Не нужно добавлять лишний материал, например «Привет», «Спасибо», «С уважением» и т. Д. На ваш вопрос. Программное обеспечение SO автоматически удалит некоторые из них; в других случаях люди отредактируют ваш вопрос, чтобы удалить его. Сохраните все время, оставив его в первую очередь - это не грубо, и это вызовет вопрос, который лучше выдерживает испытание временем. Если вы хотите добавить личный контакт, попробуйте вместо этого заполнить свой [профиль] (http://stackoverflow.com/users/251552/user251552). – Caleb

ответ

1

Либо ваша реализация initWithCoder: возвращает nil, либо часть кода пытается вставить значение nil в массив.

Вы можете войти в навигатор точки останова (⌘6) и добавить контрольную точку исключения. Затем, когда приложение вызывает исключение, Debug Navigator отобразит стек функций и методов, выполняемых в настоящее время. Это позволит вам точно знать, какой метод пытается вставить nil в массив.

+0

Спасибо, я никогда раньше не использовал этот вид, и это очень удобно. Я нашел свою ошибку напрямую (это было глупо). – rmonjo

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