我可以为我的 NSCoding 类 覆盖 swift 每个模块的命名空间吗? (我需要 Module1.MyCodedClass == Module2.MyCodedClass)
Can I Override swift per-module namespaces for my NSCoding classes? (I need Module1.MyCodedClass == Module2.MyCodedClass)
我可以为我的 NSCoding class 覆盖 swift 每个模块的命名空间吗?
我基本需要:
Module1.MyCodedClass == Module2.MyCodedClass
我知道我可以将 MyCodedClass 放在一个动态框架中,我使用了这种方法,但这似乎有点过分了:D
也许为某个class设置自定义模块?
或者告诉 nscoder class a == class b ...
如果主要问题是 NSCoding,我在 class 声明之前使用 @objc() 属性完成了此操作,如下所示:
@objc(MyCodedClass) class MyCodedClass: NSObject, NSCoding {
...
}
这会导致 NSCoder 仅使用您的 class 的名称而不附加模块名称(如果 class 在 Objective-C 中实现,它会这样做)
此外 - 这是我 刚刚 学到的东西,它完全解决了我面临的问题。在我对我的编码 classes 执行上述 @objc() 修复之前,我有几个版本的应用程序发布,所以基本上有 Module1.MyCodedClass
的编码版本浮动(存储在数据库中)和我现在需要能够将它们解码为简单的 MyCodedClass
对象。您可以在 NSKeyedUnarchiver
中这样做:
[NSKeyedUnarchiver setClass:[MyCodedClass class] forClassName:@"Module1.MyCodedClass"];
到目前为止,在我的测试中它工作得很好......只要你在尝试解码对象之前为旧的 class 名称设置 class,你应该被设置.每当您尝试解码 Module1.MyCodedClass
个对象时,它会将它们解码为 MyCodedClass
个对象。
我可以为我的 NSCoding class 覆盖 swift 每个模块的命名空间吗?
我基本需要:
Module1.MyCodedClass == Module2.MyCodedClass
我知道我可以将 MyCodedClass 放在一个动态框架中,我使用了这种方法,但这似乎有点过分了:D
也许为某个class设置自定义模块?
或者告诉 nscoder class a == class b ...
如果主要问题是 NSCoding,我在 class 声明之前使用 @objc() 属性完成了此操作,如下所示:
@objc(MyCodedClass) class MyCodedClass: NSObject, NSCoding {
...
}
这会导致 NSCoder 仅使用您的 class 的名称而不附加模块名称(如果 class 在 Objective-C 中实现,它会这样做)
此外 - 这是我 刚刚 学到的东西,它完全解决了我面临的问题。在我对我的编码 classes 执行上述 @objc() 修复之前,我有几个版本的应用程序发布,所以基本上有 Module1.MyCodedClass
的编码版本浮动(存储在数据库中)和我现在需要能够将它们解码为简单的 MyCodedClass
对象。您可以在 NSKeyedUnarchiver
中这样做:
[NSKeyedUnarchiver setClass:[MyCodedClass class] forClassName:@"Module1.MyCodedClass"];
到目前为止,在我的测试中它工作得很好......只要你在尝试解码对象之前为旧的 class 名称设置 class,你应该被设置.每当您尝试解码 Module1.MyCodedClass
个对象时,它会将它们解码为 MyCodedClass
个对象。