繁体   English   中英

TyphoonAssembly没有组装以@Property提供的对象

[英]TyphoonAssembly not assembling Objects provided as @Property

我想定义我的程序集可以通过属性而不是公共方法组装的所有对象(下面的原因)。 我看到的问题是,当我调用[XYZAssembly getXYZProperty]我的程序集无法组装这些对象。 而不是XYZProperty的实例我得到TyphoonDefinition: class='XYZPropertyClass', key='(null)', scope='Unknown

例如在我的Header文件中:

@property (nonatomic, strong, getter=getXYZProperty) XYZPropertyClass *XYZProperty

在我的实现文件中:

-(XYZPropertyClass *)getXYZProperty {
     return [TyphoonDefinition withClass:[XYZPropertyClass class]];
}

为什么我要走这条路而不是在没有@Properties的情况下创建公共方法? 我的目标是使用OBJC Runtime,这样我就可以检索属性的类,我正在寻找的符合特定协议,它的名称,访问器选择器等等......拥有所有这些信息我基本上可以说,[XYZAssembly performSelector(@selector(无论属性的选择器是什么)]。OBJC Runtime没有提供任何关于返回类型的信息(只有它的一个Object),所以没有它我不知道它是否符合特定的协议。

我有什么理由不这样做吗? 这是一个众所周知的错误? 故意这样做?

我想我找到了造成这个问题的原因。 在实例化程序集时,程序集中的所有属性也将被视为程序集。 我假设如果Assemblies属性是其他Assemblies,那么Assemblies应该只有属性。 Typhoon不允许将Assemblies与Assemblies以外的其他属性一起使用是否有任何理由? 如果没有,我应该提交一个错误,要求检查该属性是否是TyphoonAssembly的子类?

我在自己的工作区中进行了更改,现在我可以毫无问题地调用我的属性的所有getter,并且它不再将我的属性识别为程序集,它只是一个XYZPropertyClass :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM