Массив сериализации пользовательских объектов iOS - PullRequest
1 голос
/ 20 марта 2012

Я знаю, что здесь есть много ресурсов, но пока не могу найти, что не так с моим кодом:

У меня есть класс Level и два подкласса Level: 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'

Я не уверен, что мне здесь не хватает.

1 Ответ

1 голос
/ 20 марта 2012

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

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

...