問題タブ [message-forwarding]
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 - スタックトレースの__forwarding__はどういう意味ですか?
現在、原因がわからないというまれなエラーが発生しています。どこを見ればいいのかわからないので、最初の5行(#0から#4)はどういう意味ですか?エラーがあるとのことですが、「」のようなものは何___forwarding___
ですか?
これについてある程度の知識がある場合は、助けてください。どうもありがとうございます。
objective-c - Objective C でのメッセージ転送
メッセージ転送の使い方を簡単に説明できる人はいますか?
リンク
- Apple のドキュメント: Apple のドキュメントはリファレンスとしては優れている傾向がありますが、長すぎて導入としては最適ではありません。
objective-c - 転送クラス メッセージ
を使用してクラスのインスタンスにメッセージを転送できることを知っています-forwardInvocation:
。クラス オブジェクトに送信されたメッセージに対して同じことを行うことはできますか (のように+forwardInvocation:
)?
objective-c - 同じインターフェースを持つ別のオブジェクトをラップする Objective-C オブジェクトの作成 - KVC/KVO の問題
別のオブジェクトからオブジェクトをラップする 1 つのクラス階層にオブジェクトを作成する必要があります。どちらも非常に似たインターフェースを持っており、独自のプロパティを実装する代わりに、ラッパーが認識しないメッセージをターゲットに自動的に転送したいと考えています。私はこれを次のようなものを使って動作させました:
ただし、これはキー値コーディングでは機能しません。ラップされたオブジェクトのプロパティを使用する方法でラッパーにキー値コーディングを実装させるにはどうすればよいですか?
objective-c - インスタンス変数のセッター/ゲッターをクラスに渡す
MarqueeLabel
UILabelテキストが含まれているビューに対して長すぎる場合に、サブビューUILabel ivarをマーキー方式でアニメーション化するUIViewサブクラス(私が呼び出している)の作成に取り組んでいます。
UILabel ivar のすべての標準 UILabel (テキスト、フォント、色など) インスタンス変数を設定/取得するためだけMarqueeLabel
に、クラスにメソッドを記述する必要なく、クリーンな実装を望んでいました。メッセージ転送でこれを行う方法を見つけました。送信された認識されていないメソッドはすべて、UILabel ivar に渡されます。私の場合、認識されないメソッドは、UILabel で通常使用されるメソッドです。MarqueeLabel
MarqueeLabel
ただし、このアプローチにはいくつかの問題があります
。 1.[marqueeLabel setText:@"Label here"]
ではなく、を使用する必要がありますmarqueeLabel.text
。
「MarqueeLabel」は「-setText:」に応答しない場合があります
私は無視することを知っていますが、他の人を苛立たせます。
これらの問題を回避するために、メソッドを ivar に「持ち込む」方法はありますか?
ありがとう!
注:これを設定した方法も、最適な方法ではない可能性があります。UILabel のサブクラス化またはクラス継続の方がよいのかもしれませんが、これらのメソッドを使用して、アニメーション + クリッピング (スクロールするテキストが UIView を含む領域から移動して消えるとき) をどのように行うことができるかを把握できませんでした。
注2:サブビューUILabelのmarqueeLabel.subLabel.text
場所を使用できることはわかっています。subLabel
そして、これは私がとる方向かもしれませんが、より良い解決策があるかどうかを確認することもできます!
iphone - iOS -- マクロを使用して一連のメッセージを転送しますか?
ForwardInvocation は存在しますが、遅く、コンパイラの警告という厄介な問題があります。マクロを使用して、別のオブジェクトから問題のプロパティを取得する一連のゲッター メソッドをすばやく実装する方法はありますか?
たとえば、Car オブジェクトがある場合、次の実装が必要になる場合があります。
質問 -- いくつかのマクロをセットアップして、どこかを変更することで、別のメソッドをヘッダー ファイルと実装ファイルの両方に追加できるようにすることはできますか?
例 MagicForwardingMacro (nPistons, int, engine);
理想的には、後で同様の戦略を使用して Person の firstName、lastName、placeOfBirth、および dateOfBirth プロパティを彼または彼女のbirthCertificate から取得したい場合に、マクロを再利用できるようにする方法です。
objective-c - メッセージ転送によって「認識されないセレクタエラー」を「飲み込む」にはどうすればよいですか?
Objective-C の「メッセージ転送」について勉強しています。実行時に認識されないセレクターを「飲み込む」ことができるかどうかを検証するテスト プログラムを作成します。だから私はこれをしました:
ただし、実行時に「認識されないセレクター」エラーがスローされます。解決策を検索した後、メソッド「methodSignatureForSelector:」をオーバーライドする必要があることがわかったので、「Proxy」という別のプロキシ クラスと次のメソッドを記述します。
しかし、実際には、このメソッドを実現するために、そのような別のプロキシ クラスを実装したくありません。私がやりたいのは、この未知のセレクターを無視することだけです。しかし、これを入力しただけでは機能しません。
それで、このエラーを単純に「飲み込む」方法があるのだろうか?(例外ハンドラを使用していない、「転送」のような方法が欲しい)。ありがとう!
ipad - iPad UISplitViewControllerは-prepareForSegue:senderメソッドを転送しません
UISplitViewControllerがありますが、デリゲートクラスが-prepareForSegue:senderメッセージを取得しません。UISplitViewControllerをサブクラス化し、オーケストレーションを行っていたすべての奇妙なセグエに備えていたため、これが当てはまることが確認されました。
これを回避するためのより良い方法はありますか?1つのメッセージを転送するためだけにUISplitViewControllerをサブクラス化することを除いて...?
objective-c - コンパイラの警告と -(void)forwardInvocation:(NSInvocation *)iInvocation
メソッドの実装をメンバー変数に委譲するクラスがあります。
簡単に書くために実装しました
と
これにより、大量のボイラープレート コードを使用せずに、クラスでいくつかのプロトコルを実装できるようになりました。
コンパイラーが実装していないすべてのメソッドに対して警告をスローしていることを除いて、かなりうまく機能しています。これらのメソッドは実際にはメンバー変数に転送されます。これらのメソッドが実際に実装されていることをシステムに伝える方法、またはそのソースに対する警告だけを黙らせる方法はありますか?
コンパイラは 3 種類の警告を発しています。
- プロトコルのメソッドが実装されていません
- プロパティ XXX にはメソッド XXX が必要です
- 実施予定 不完全な実施
以下のコードでは、私がデリゲートするオブジェクトのクラスはShareUser
あり、インスタンスは_user
ios - オブジェクト(iOS)で呼び出されたすべてのメッセージ呼び出しを監視する方法はありますか?
オブジェクトにメッセージを送信するたびに、セレクター名と、引数、送信者、またはNSInvocationインスタンスを取得したいだけです。可能?forwardInvocation:のようなものですが、すべての場合(すべてのメソッド呼び出し)。