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 に一致するコンポーネントがありません」や「構成に値が見つかりません」などのさまざまなエラーが発生することもあります。しかし、私が言ったように、時にはうまくいくこともあります。

Typhoon の初期化方法の基本的な部分が欠けているに違いないので、どんな助けも大歓迎です!

編集: Swift プロジェクトの静的ライブラリの代わりにフレームワークを使用する CocoaPods の問題により、上記で試した最初の方法が失敗しているように見えますか? TyphoonResource でこのコードを見つけました。

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

Typhoon フレームワーク内のクラスに解決されるので[self class]、なぜそれがバンドルであり、それが使用しているバンドルなのかがわかると思いますが、私にはバグのように思えます。これが PocketForecast アプリを壊さない理由を突き止めることができるかどうか見ていきます。

4

1 に答える 1

0

これは Typhoon 3.0.1 のバグでした。Typhoon が Swift フレームワークとしてリンクされているときに指摘したように、TyphoonConfig リソースの間違ったバンドルが使用されます。これは Typhoon 3.0.2 で修正されました。

于 2015-03-18T03:09:14.800 に答える