TyphoonConfig试图用错误的捆绑路径加载plist

时间:2015-03-17 16:58:00

标签: ios swift typhoon

我是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应用程序。

1 个答案:

答案 0 :(得分:0)

这是Typhoon 3.0.1中的一个错误。正如您所说,当Typhoon作为Swift框架链接时,使用TyphoonConfig资源的错误包。此后已在台风3.0.2中得到纠正。