我是Typhoon的新手,似乎无法弄清楚如何正确加载我的Configuration.plist。我的项目是以Swift PocketForecast为例建模的,虽然我从自己的CocoaPods项目开始,并自己添加了Typhoon(即我没有从克隆的PocketForecast项目开始)。我正在使用与多个组件的plist集成。
当我使用它时:
public dynamic func config() -> AnyObject {
return TyphoonDefinition.configDefinitionWithName("Configuration.plist")
}
我收到一个文件未找到错误,在调试器中我可以看到它使用的路径是" /path/to/MyProject.app/Frameworks/Typhoon.framework",但当然我的配置文件它不在那里,它位于" /path/to/MyProject.app/Configuration.plist"。是的,我已经确认文件确实在那里。
我尝试通过这样做来解决这个问题:
public dynamic func config() -> AnyObject {
return TyphoonDefinition.withClass(TyphoonConfigPostProcessor.self) {
(definition) in
definition.injectMethod("useResourceAtPath:") {
(method) in
method.injectParameterWith(self.configURL())
}
}
}
public dynamic func configURL() -> AnyObject {
return TyphoonDefinition.withFactory(self.configBundle(), selector: "URLForResource:withExtension:", parameters: {
(initializer) in
initializer.injectParameterWith("Configuration")
initializer.injectParameterWith("plist")
})
}
public dynamic func configBundle() -> AnyObject {
return TyphoonDefinition.withClass(NSBundle.self) {
(definition) in
definition.useInitializer("mainBundle")
}
}
奇怪的是,这有效 - 有时候。它似乎是随机的,并且基于我的其他Typhoon程序集的加载顺序。换句话说,有时一切都很好,但有时候台风初始化会爆炸出各种不同的错误,例如"没有组件匹配id XYZ"或者"无法在config"中找到值。但就像我说的,有时它的工作正常。
我必须错过Typhoon初始化的一些基本部分,所以非常感谢任何帮助!
编辑:所以经过一番探讨之后看起来我上面尝试的第一个方法是失败的,因为CocoaPods使用框架而不是Swift项目的静态库存在问题?我在TyphoonResource中找到了这段代码:
+ (id <TyphoonResource>)withName:(NSString *)name
{
return [self withName:name inBundle:[NSBundle bundleForClass:[self class]]];
}
由于[self class]
将解析为Typhoon框架内的一个类,我想我明白为什么那是捆绑它正在使用的捆绑包,但这对我来说似乎是个错误。我想知道为什么这不会破坏PocketForecast应用程序。
答案 0 :(得分:0)
这是Typhoon 3.0.1中的一个错误。正如您所说,当Typhoon作为Swift框架链接时,使用TyphoonConfig资源的错误包。此后已在台风3.0.2中得到纠正。