1

我是 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 匹配的组件”或“在配置中找不到值”。但就像我说的,有时它工作得很好。

我一定错过了台风初始化的一些基本部分,因此非常感谢任何帮助!

编辑:所以经过一番摸索之后,看起来我上面尝试的第一种方法失败了,因为 CocoaPods 使用框架而不是 Swift 项目的静态库的问题?我在 TyphoonResource 中找到了这段代码:

+ (id <TyphoonResource>)withName:(NSString *)name
{
    return [self withName:name inBundle:[NSBundle bundleForClass:[self class]]];
}

由于[self class]将解析为 Typhoon 框架内的一个类,我想我明白为什么它是它正在使用的包,但它对我来说似乎是一个错误。我要看看我是否能弄清楚为什么这不会破坏 PocketForecast 应用程序。

4

1 回答 1

0

这是 Typhoon 3.0.1 中的一个错误。正如您在 Typhoon 链接为 Swift 框架时指出的那样,使用了错误的 TyphoonConfig 资源包。这已在 Typhoon 3.0.2 中得到纠正。

于 2015-03-18T03:09:14.800 回答