1

Typhoon Framework をアプリに統合しようとしていますが、問題が 1 つあります。

から継承した 3 つのクラスがありTyphoonAssemblyます。それらの1つは別のものに依存しています。

依存関係のあるアセンブリのコードは次のとおりです

@interface SMObjectFactory : TyphoonAssembly

@property(nonatomic, strong, readonly) SMManagersAssembly *managersAssembly;

- (SMNote *)createEmptyNoteWithCurrentDate;

@end

// ===================================

@implementation SMObjectFactory {}

- (SMNote *)createEmptyNoteWithCurrentDate {
    return [TyphoonDefinition withClass:[SMNote class] configuration:^(TyphoonDefinition *definition) {
        [definition useInitializer:@selector(init)];
        NSDate *dateAdded = [NSDate date];
        [definition injectProperty:@selector(key) with:[NSString UUID1WithDate:dateAdded]];
        [definition injectProperty:@selector(dateAdded) with:dateAdded];
        [definition injectProperty:@selector(folderKey) with:self.managersAssembly.folderManager.defaultFolder];
    }];
}

@end

を呼び出すときに問題が発生しself.managersAssembly.folderManager.defaultFolderます。self.managersAssemblyこれは のインスタンスでTyphoonCollaboratingAssemblyProxyあるため、実際のアセンブリではなくTyphoonReferenceDefinitionself.managersAssembly.highlightManagerのインスタンスであり、それぞれ folderManager によって返されるオブジェクトです。

Info.plist で次のように定義されているアセンブリ

Info.plist で次のように定義されているアセンブリ

これらのアイテムの順序を変更しようとしましたが、うまくいきませんでした。

行がなくてもself.managersAssembly.folderManager.defaultFolder正常にコンパイルされます。たとえば、アプリデリゲートクラス (これも注入されます) で [(SMManagersAssembly *)self.assembly highlightManager].defaultHighlight を呼び出すと、完全にうまく機能します。

私が間違っていることと、それを行う適切な方法は何ですか?

台風2.2.1号

4

1 に答える 1

1

あなたが望むことを行うには、ユーザーガイドの「他のコンポーネントによって生成されたオブジェクトを注入する」を参照してください。ここには、本質的に同じことを行う 2 つのスタイルが概説されています。最も当てはまるものを使用してください。

また、次の点にも注意してください。

1 つまたは複数のアセンブリを作成します。後者の場合、あるアセンブリのコンポーネントは、プロパティを宣言することにより、別のアセンブリのコンポーネントを参照できます。例えば:

@interface PFApplicationAssembly : TyphoonAssembly

@property(nonatomic, strong, readonly) PFCoreComponents *coreComponents;
@property(nonatomic, strong, readonly) PFThemeAssembly *themeProvider;

@end

Typhoon は、{PFApplicationAssembly, TestCoreComponents, ColorfulThemes} など、上記を満たすアセンブリの任意の組み合わせでアプリケーションをビルドします。

定義をオーバーライドしたい場合にのみアセンブリをオーバーライドする必要があります (テストと本番など)。

于 2014-10-07T14:25:50.363 に答える