問題タブ [method-swizzling]
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.
objective-c - 静的ライブラリでメソッドのスウィズリングは可能ですか?
自動 UI ロギングを作成しようとしていますが、メソッドのスウィズリングが問題に対する非常に優れた解決策であることがわかりました。実装sendAction方法をいじってみました。UIApplication
私の問題は、機能する場合と機能しない場合があることです。特にスタティック ライブラリにコードを記述した場合は、それを .a ファイルにエクスポートしてプロジェクトで使用します。
静的ライブラリ内に実装されている場合、メソッドのスウィズリングは問題になるはずですか?
コードでも、動作することもあれば、何も起こらないこともあります。それは常にメソッドに入ります
loadが、常にメソッドに入るとは限りませんheap_sendAction。
コードは次のとおりです。
- - - アップデート - - :
関数をviewcontroller.mクラス内に配置すると、heap_sendActionが呼び出されます。現在、さまざまなコードの場所を試して、いつ機能し、いつ機能しないかを確認しています。
ios - 3DタッチピークポップでUIScrollViewを適切にスウィズルするには?
3D Touch のピークとポップのプレビューが埋め込まれている UIScrollView をスウィズルしようとしています (Reveal アプリを介して UIScrollView であることはわかっています)。
ユーザーがこのスクロール ビュー/3D タッチ プレビューで指を動かすたびに知りたいです。
次のようにスウィズルしてみました。
しかし、画面上で指をスライドさせて数百回の呼び出しがあるはずのときに、「はい」と呼ぶのは1回か2回だけです。
私はこれを間違ってスウィズしていますか?
ios - UICollectionView の ScrollViewDidScroll またはその他の scrollview メソッドをスウィズルする方法
コレクション/テーブルビューのいくつかのスクロールビュー メソッドをスウィズルして、いくつかのイベントを追跡したいと考えています。コレクションビューで scrollViewDidScroll: Method が見つからないため、エラーが発生します。以下のコードを使用しようとしました
エラー: タイプ UICollectionView にメンバー 'scrollViewDidScroll' がありません
ios - シミュレータ用にビルドする際のアーキテクチャ x86_64 の未定義シンボル
別のセレクターへの IMP 転送にimp_implementationForwardingToSelector lib を使用しています。実際のデバイスでは問題なく動作しますが、シミュレーター用にビルドしようとするとエラーが発生します
エラー: アーキテクチャ x86_64 の未定義のシンボル
不足している設定や、同じことを行うのに役立つ他のライブラリの提案はありますか。
objective-c - テスト用に Swift クラス プロパティをオーバーライドする方法
単体テストを行っている Swift クラスがあります。このクラスの主な目的は、HTTP 呼び出しを行うことです。Mockingjayを使用してすべてのネットワーク リクエストのモックを作成しましたが、今後のリクエストをモックすることを忘れないようにしたいと思います。最初のモックを作成しているときに、使用しているベース URL を機能しない URL に置き換えましたが、テストのためだけにそのままにしておきたいと思います。テスト対象のクラスは次のようになります。
Objective-C クラスのOCMockを使用しての実装を置き換えようとしました。また、NSHipster で説明されているように、baseURLメソッド スウィズリングを使用してみました (クラスを派生させ、表示されているプロパティの代わりにメソッドに置き換えました)。上記 - 特にクラスをサブクラスにする必要がないため、スウィズルはしたくありません)。NSObjectbaseURLNSObject
これは、試行されたスウィズルを実行するために使用したコードですが、効果はありませんでした. 以下の両方の解決策について、テスト対象のクラスを次のように書き直しました (どちらのアプローチも Swift プロパティまたは純粋な Swift クラスではうまく機能しないように見えたため)。
これは私のスウィズルの試みでした(Swiftで)。ログに基づいて、else何が起こっているのかを理解するのに役立つ場合に備えて、毎回ステートメントをヒットします。
これは、OCMock (Objective-C) を使用してメソッドを置き換えようとした方法です。コードは、単体テストの構成中に呼び出されます。
から無効な値を返すという目標を達成する正しい方法は何baseURLですか?
ios - 関数のスウィズリング - 実行時にのみ認識される関数
Objective-C で関数をスウィズルしたい。問題は、実行時にのみスウィズルする必要がある関数を知っていることです。コード内のさまざまなメソッドには、さまざまな戻り値の型、入力パラメーターなどがあります。
関数とそれが属するクラスの名前が与えられた場合、ブロックを作成し、imp_implementationWithBlock を使用して IMP を作成し、この新しく作成された IMP で元のメソッドをスウィズルできる (ジェネリック) コードをどのように記述すればよいでしょうか。
ios - Swift - メソッド スウィズリングを使用するプロトコルに準拠する場合にのみクラスを拡張する
というプロトコルがありますNakedNavigationBar。
UIViewControllerに準拠するすべての を拡張する拡張機能もありますNakedNavigationBar。
問題は、拡張機能でデフォルトの動作を追加して、 のUIViewController初期化時にメソッドのスウィズリングを使用することUIViewControllerです。
ここに私のプロトコルと拡張子があります:
基本的に、メソッドがないためプロトコルを拡張できないと言っていUIViewControllerます。しかし、私が理解してwhere Self: UIViewControllerいるように、これは でのみ機能し、UIViewControllerに準拠している場合にのみビューコントローラーを拡張する必要がありNakedNavigationBarます。
もともと拡張機能はありましたが、これにより、選択したものだけでなく、extension UIViewController: NakedNavigationBarすべてのUIViewControllers が即座に適合します。NakedNavigationBar
ios - method_setImplementation() はアトミックですか?
method_setImplementation()NSObject クラスのメソッドを置き換えるdeallocと同時に、別のスレッドで NSObject インスタンスがメソッドを呼び出しているか、呼び出そうとしているとどうなりますかdealloc。
deallocインスタンスはメソッドの正しいアドレスを取得しますか? メソッドのスウィズリングを使用すると、ランダムにクラッシュします。また、dealloc メソッドを呼び出すと、常にクラッシュします。
これが私のクラッシュ情報です:
およびクラッシュしたスレッド:
nullポインタを取得しました。
dealloc メソッドを安全に置き換える方法はありますか?
