使用协议作为汇编接口时,台风初始化失败

时间:2014-12-12 15:48:20

标签: ios objective-c typhoon

我正在尝试将大型应用程序转换为使用协议而不是类作为程序集。这一切都相当简单,但它无法正确初始化。我已经追查过这个问题了。当Typhoon初始化程序集时,它会询问每个程序集的属性,如果它们是Typhoon类,则初始化它们。当我将一个属性转换为Typhoon类时,它的效果很好;当我将属性转换为协议类型时Typhoon不会将其识别为Typhoon类,并且不会初始化它并且初始化失败。

所有相关的Typhoon代码都在[TyphoonAssembly init]中的resolveCollaboratingAssemblies方法中。

以下是示例代码:

这有效:

@class myCoreAssembly : TyphoonAssembly

@interface

@property (readonly, weak, nonatomic) myCoreAssembly *coreAssembly;

(methods)

@end 

这不是:

@protocol myCoreAssemblyProtocol

@interface

@property (readonly, weak, nonatomic) id <myCoreAssemblyProtocol> coreAssembly;

(methods)

@end 

@class myCoreAssembly :TyphoonAssembly <myCoreAssemblyProtocol>

@interface

@property (readonly, weak, nonatomic) id <myCoreAssemblyProtocol> coreAssembly;

(methods)

@end 

在Typhoon Init过程中的某个时刻(方法propertyForName:(NSString *)propertyName isCollaboratingAssemblyPropertyOnClass:(Class)class),代码会检查属性类型是否为TypeAssembly的子类。协议版本未通过此测试。

有关解决方法的任何想法吗?

1 个答案:

答案 0 :(得分:1)

我想我找到了解决方案。我将属性键入为TyphoonAssembly并且自动注入再次工作。

没有工作:

@property (readonly, weak, nonatomic) id <myCoreAssemblyProtocol> coreAssembly;

使用:

@property (readonly, weak, nonatomic) TyphoonAssembly <myCoreAssemblyProtocol> *coreAssembly;

这也是有意义的,因为自动注入属性需要成为TyphoonAssembly的子类。