Если основной проблемой является NSCoding, я сделал это с атрибутом @objc() до объявления класса, как это :
@objc(MyCodedClass) class MyCodedClass: NSObject, NSCoding {
...
}
Это вызывает NSCoder использовать только имя вашего класса без имени модуля присоединенной (так, что он будет делать, если класс были реализованы в Objective-C)
Al поэтому - вот что-то я только узнал, что полностью исправил проблему, с которой я столкнулся. У меня было пару версий моего приложения, прежде чем я выполнил вышеупомянутое исправление @objc() на моих закодированных классах, так что в основном есть кодированные версии Module1.MyCodedClass
, которые плавают вокруг (хранятся в базе данных), и мне нужно было расшифровать их как просто MyCodedClass
объектов сейчас. Вы можете сделать это в NSKeyedUnarchiver
так:
[NSKeyedUnarchiver setClass:[MyCodedClass class] forClassName:@"Module1.MyCodedClass"];
До сих пор в моем тестировании она прекрасно работает ... до тех пор, пока вы установите класс для старого имени класса до когда-либо пытается декодировать объект, вы должны быть установленным. Всякий раз, когда вы пытаетесь декодировать объекты Module1.MyCodedClass
, они будут декодировать их как объекты MyCodedClass
.
Возможно, я не понимаю. Зачем вам нужно одно и то же определение класса в двух отдельных рамках? Если они немного отличаются друг от друга, они не будут равны, и если они будут точно такими же, это дублирование кода. –
приложение a и app b ... и, как я уже сказал, структура кажется излишней ... просто для того, чтобы получить одно и то же пространство имен. [apple discouragess слишком много ссылок слишком); –
и я не хочу делиться кодом между a и b. должен существовать только общий «контракт» между разработчиками –