NSKeyedUnarchiver.unarchiveObjectWithFile вылетает при загрузке классов, созданных из другой цели - PullRequest
0 голосов
/ 06 января 2019

У меня есть файл PLIST, который был создан с использованием производственной версии приложения и добавлен в качестве ресурса в проект. Название целевой версии - «маленький пони». Для того, чтобы помочь с тестированием приложения, есть другая версия, созданная под другой целью в рамках того же проекта, «маленькая пони-бета». Во время выполнения бета-приложение пытается загрузить PLIST и выдает сообщение:

Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: '*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (little pony.Layer) for key (NS.objects); the class may be defined in source code or a library that is not linked'

Похоже, что PLIST должен содержать little pony beta.Layer вместо little pony.Layer класса для успешной загрузки.

Есть ли способ заставить NSKeyedUnarchiver.unarchiveObjectWithFile использовать другое пространство имен, чтобы это работало? Конечно, я не хочу создавать два разных набора предварительно скомпилированных данных, так как это задача с интенсивным использованием ЦП.

1 Ответ

0 голосов
/ 07 января 2019

Я нашел решение здесь: https://stackoverflow.com/a/37162921/279813

В решении предлагается изменить имя класса для NSCoding с помощью

[NSKeyedUnarchiver setClass:[Layer self] forClassName:@"little pony beta.Layer"];
...