問題タブ [typhoon]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
typhoon - Typhoon: コンポーネント キーに関連する定義にパッチを適用するにはどうすればよいですか?
ドキュメントとこの SO 投稿で示されているようにパッチャーを実装しようとしています: Typhoon: How to get an instance conforming to a protocol for production, and another for tests? .
ブロック アセンブリを使用していますが、次のエラーが表示されます。
でTyphoonPatcher.m: 46
。
私のクラスの実装は、このセレクターに応答しません。それはすべきですか?キーはパッチ適用プロセスにどのように関連していますか?
AppDelegate.m
objective-c - Typhoon: ビュー コントローラー プロバイダーの注入
グラフ内のオブジェクトのライフサイクルの作成と管理を担当する手作りのコンテナー/インジェクターを使用する場合、次のパターンを使用します (ObjC での DIY DI に関する記事を読みました)。
別のビュー コントローラー (詳細ビュー コントローラーと呼びましょう) を表示したいルート ビュー コントローラーがあり、データを渡しているとします。私が通常行うことは、データを引数として受け取り、表示する新しいビュー コントローラーを返すプロバイダー ブロックを挿入することです。ここにいくつかのコードがあります...
ファクトリ クラスを使用することもできますが、この方法では、コンテナー クラスにプロバイダー ブロックを作成するだけで新しいクラスを作成することを回避できます。
問題は、Typhoon を DI コンテナーとして使用したい場合です。どうすれば同じパターンを使用できますか? 私の詳細ビューコントローラーでは、他のものを注入しています。コンストラクター注入を引き続き使用したいので、私ではなくコンポーネントファクトリによって作成されることを好みます。詳細 VC を作成するためのファクトリ クラスを作成し、後で詳細 VC に注入する依存関係を (ファクトリ) に注入することもできますが、ブロック ベースのソリューションと比較すると、作業が多すぎるようです。
ルート ビュー コントローラーからコンポーネント ファクトリにアクセスしたくありません。また、someData のセッター インジェクションも使用しません。
これに対する解決策はありますか?
typhoon - Typhoon - xib ファイルで定義された UIView を挿入するにはどうすればよいですか?
単体テストにモック ビューを挿入できるように、View Controller にビューを挿入したいと考えています (WPDependencyInjectorImplementation
私のTyphoonAssembly
サブクラスです)。
私の理想的なloadView
方法は次のようになります。
xib からビューを作成するためのコードが次のとおりであることを考えると、これの定義がどのように見えるか、またはそれが可能かどうかはわかりません。
ios - Typhoon でモックを注入する
XCTest を作成し、Typhoon でモックされた依存関係を注入しようとしています。
これが私のコードですViewController
:
インジェクションを変更しようとしている方法は次のとおりです。
ただし、このファクトリをデフォルトとして設定できないため、テストは失敗しています。私はAppDelegate
工場で設定します:
この状況から抜け出すには?
ios - Typhoon で非プロパティ メソッドを使用してオブジェクトを初期化する
特に DI と Typhoon は初めてです。init メソッドとプロパティ以外のメソッドでオブジェクトを初期化できるかどうか疑問に思っています。私は ObjectMapper と呼ばれるクラスを持っています。ObjectMapper は N 個の ObjectMaps を持つことができます。台風を使用する前に、次のようにマップを作成します。
ObjectMap *map1 = [ObjectMap new];
[map1 mapProperty:@"prop1" toName:@"name1"];
[map1 mapProperty:@"prop2" toName:@"name2"];
ObjectMap *map2 = [ObjectMap new];
[map2 mapProperty:@"prop3" toName:@"name3"];
mapper.maps = @[map1, map2];
マップとマッパー オブジェクトは、アプリケーションの存続期間を通じて変更されることはありません。Typhoon で ObjectMapper と ObjectMaps を作成したいと思います。更新: TyphoonFactoryProvider が役立つようですが、ファクトリによって作成されたオブジェクトを「maps」配列に配置する方法がわかりません。
objective-c - Typhoon でデフォルト ファクトリを複数回設定できないのはなぜですか?
私の単体テストでは、Typoon および TyphoonBlockComponentFactory オブジェクトを使用して、モックやオブジェクトなどをインスタンス化しています。すべての単体テストが一度に順番に実行され、それぞれが実行する必要があるアセンブリのみを含む独自のファクトリをセットアップします。
そのファクトリを作成し、毎回デフォルトのファクトリにするため、テスト対象のクラスはファクトリから依存関係をインスタンス化できます。ただし、TyphoonComponentFactory の「makeDefault」メソッドは、dispatch_once ブロックにラップされているため、アプリの存続期間中に 1 回しか発生しません。
なんで?私のアプローチの一部は根本的に間違っていますか?どういうわけか、tearDown メソッドで Typhoon 状態を破壊できるようにしたいのですが、方法がわかりません - シングルトンを破壊することはできません!
objective-c - Typhoon でオブジェクトを作成するとクラッシュする
オブジェクトをインスタンス化しようとすると、TyphoonComponentFactory.m でクラッシュが発生します - この行は EXC_BAD_ACCESS でクラッシュします:
または時々これ:
すべての変数 (プール、インスタンス、定義) は、デバッガーでクラッシュ時に正しく表示されます。プログラムの実行の早い段階で (ただし、それほど前ではなく、つまり同じ実行ループ)、TyphoonComponentFactory をセットアップし、それをデフォルトのファクトリにしました。これを引き起こしている可能性のあるものはありますか?ファクトリの作成が発信者にとって遅すぎるという漠然とした理論がありましたが...かなり弱いです。
台風バージョン 1.8.2。アセンブリは次のとおりです。
276 行目のクラッシュのスタック トレース:
関連オブジェクトの値:
self: レジストリで利用可能なすべての関連オブジェクトを含む TyphoonBlockComponentFactory。定義: "定義: class='AuthenticationDetails', key='authenticationDetails'" プール: NSDictionary、0 のキーと値のペア インスタンス: id、初期化されていないポインター。
当時のメイン スレッドのスタックは次のとおりです。Typhoon の参照も含まれています。
さらに更新:
Typhoon はデフォルトで TyphoonScopeObjectGraph に設定されているようですが、これは明らかにスレッドセーフではありません。すべての非シングルトンを TyphoonScopePrototype に切り替え、59 行目の TyphoonCallStack -pop でクラッシュが発生するようになりました[_storage removeLastObject]
。ある種の例外のようですが、デバッガーは有用なものを何も吐き出しません。
ios - Typhoon フレームワークを使用しているプロジェクトで CLLocationManager デリゲートが呼び出されない
アプリケーションで台風フレームワークを使用しています。私のアプリケーションは正常に動作しています。今、私は自分のアプリで位置情報を更新したいと考えています。Location フレームワークを追加し、コードを実装しました。しかし、CLLocationManger デリゲート メソッドが機能していません。
デモアプリで同じコードをコピーしましたが、依存関係はなく、同じコードが機能し始め、場所の更新を取得できます。
そのような行動の考えられる理由を誰か教えてください。
私が使用しているコードは次のとおりです。
私のLoginViewController.miでは、(void)viewDidLoadメソッドで次のコードを使用しています