問題タブ [nsinvocation]
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.
iphone - Objective C-NSInvocationは自分自身を送信者として渡しますか?
NSInvocationを使用してオブジェクトのメソッドを呼び出し、をsender
引数として送信しようとしています。以下のコードはmthodを呼び出しますが、オブジェクトがmthodに渡されているようですが、実際には自己オブジェクトではありません
objective-c - ブロック引数を使用してNSInvocationを作成します
NSInvocationによって呼び出されるメソッド(コンテキストでは、NSInvocationOperationによって起動される)への引数としてブロックを送信しようとしています。呼び出しは引数を保持する必要があり、「通常の」オブジェクトパラメータに対して機能しているように見えますが、ブロックのretainCountは1のままです。
メソッド呼び出しで使用された後で解放することはできますが、操作が呼び出される前にキューが解消されると、理論的にはリークする可能性があります。
いくつかのコード:
私が使用しているブロック(NSManagedObject
サブクラスのアクセサーメソッドで定義されている):
iphone - NSOperationQueue から NSInvocationOperation を削除/キャンセルする方法は?
NSOperationQueue と NSInvocationOperation を維持するために、次の両方の質問がコンテキストで求められています。
この概念を使用して複数のビデオをダウンロードしたので、ビデオのダウンロードの完了後に追加された NSInvocationOperation を NSOperationQueue から削除/解放するにはどうすればよいですか?
また、ダウンロードの進行中に特定の動画のダウンロードを停止したい場合はどうすればよいですか?
objective-c - nsinvocation は呼び出されますか?
私はObjective CとiPhoneの開発の初心者です。混乱しました。別のボタンをクリックした後、実行時に作成されるボタンを作成しようとしていますが、アプリケーションはそれを認識していません:
私は何を間違っていますか?呼び出しが呼び出されますが、結果はありません...次の方法で作成できることはわかっています。
しかし、呼び出しを使用する必要がありますが、なぜ機能しないのですか?
ご協力いただきありがとうございます。
objective-c - NSValue:getValue: 奇妙な動作、なぜこれが起こるのですか?
CGRect を NSInvocation (setArgument:atIndex:) に渡そうとします。NSValue でラップし、NSArry にプッシュしてから、NSArray から取得し、NSValue (getValue:) を使用します。(getValue:) メソッドを呼び出すと、宣言前のインデックス NSInteger i が変更されます。なぜこれが起こるのか誰にも言えますか?
この(getValue:)
メソッドが 'i' の値を 2 から 1130102784 のような値に変更すると、(setArgument:atIndex:)
インデックス i が範囲外であるため、SIGABRT が発生します。
では、なぜ は[NSValue getValue:(*void) buffer]
他の変数を変更するのでしょうか?
(PS関数でそれを行うので、例を単純化して配列を直接初期化します。そして、直接atIndex:2を設定すると、完全に機能します。しかし、悲しいことに、少し単純化し、iをatIndexに渡す必要があります: )
Tom Dalling (特に) と sergio の問題が解決したおかげです。これを削除します:
これを貼り付けます
ありがとうございました。Stackoverflow.com は、頭の良い人がいる本当に役立つサイトです。
objective-c - Objective-C:BOOL型パラメータでperformSelectorを呼び出す方法は?
BOOL
in selectorを送信する方法はありますか?
または私は使用する必要がありますNSInvocation
か?誰かサンプルを書いてくれませんか?
objective-c - NSInvocation getReturnValue: がオブジェクトを失うのはなぜですか?
あなたの助けが必要です。NSInvocation 'getReturnValue:' メソッドに問題があります。UIButton をプログラムで作成したいのですが、さらに、NSInvocation を使用し、NSArray を介して値を渡すことで動的に作成したいと考えています (そのため、UIButtonTypeRoundedRect をラップしました)。
リスト。
NSLog 出力: sizeof(UIButton)=140、sizeof(result)=4、methodreturnlength = 4、sizeof(*result)=1
問題は、NSInvocation からの値がサイズ 4 バイトのポインターであることです。サイズが 140 バイトの UIButton オブジェクトを指す必要があります。しかし、実際には 1 バイトのデータを指します。'buttonWithType:' で初期化する必要がある UIButton オブジェクトはどうなりますか?
いくつかの回答を得た後に追加されました:
UIButton
明確にするために:私はオブジェクトを取得したいのですが、このコードid pushButton5 = (id) result;
の後、操作しようとするpushButton5
とEXC_BAD_ACCESS
. 誰かが私を助けることができますか?
これが原因で起こり得るのでしょうか?
正しいですね。
iphone - 生成されるオブジェクトにメッセージを送信します
将来インスタンス化される場合とされない場合があるUIViewControllerというオブジェクトとメソッド名を送信する必要がある状況にあります。問題をもう少し面白くするために、2つまたは3つの追加のUIViewControllerがプッシュされた後、UIViewControllerがUINavigationControllerにプッシュされます。
これを行うための最良の方法は何でしょうか?醜いアプローチは、中間のコントローラーを介してメッセージパッケージ(オブジェクトとメソッド名)を中継することです。それは醜いです。
単にUINavigationControllerをサブクラス化し、オブジェクトとメソッド名をぶら下げますか?多分。次に、そのメッセージパックをいつクリアするかをどのように知ることができますか?
ただし、この場合、NSInvocationは非常に有望に見えます。何か考えはありますか?
いいえいいえいいえシングルトン、または外部構造体をお願いします。
編集:コメントをありがとう。
@ Akshay、私はそれについて考えました。質問は、メッセージパッケージ(オブジェクトとメソッド名)を特定のnavigationControllerの下の特定のオブジェクトに送信したい場合はどうなりますか?さらに、ターゲットオブジェクトがインスタンス化されていない場合は、後で使用するためにシングルトンをクリアする必要があります。しかし、それでは、いつ片付けるかをどうやって知るのでしょうか?シングルトンを使用するのは面倒です。
@ Praveen-K、NSNotifcationは、すでに存在する人に対してのみ機能します。生成されるオブジェクトにメッセージパッケージを送信したいと言いました。
@PragmaOnce、私と他の2人のチームメイトが現在アーキテクチャを設計しています。これが説明することを願っています。データセンターのシングルトンは使用しないでください。
@Sedate Alien、その通り!
@ 9dan、ご意見ありがとうございます。実際、NSClassFromString、NSSelectorFromString、performSelectorがあり、任意のオブジェクトをインスタンス化し、メッセージを送信して、任意の数のオブジェクトで任意のメソッドを実行できます。
問題は、そのメッセージを複数のオブジェクト(私の場合はUIViewController)にエレガントに送信する方法です。UIViewControllerを使用していて、現在のUIViewControllerの上にさらにいくつかのUIViewControllerをプッシュするとします。その後、特定のクラスのオブジェクトをインスタンス化し、オブジェクトを使用してメソッドを実行する場合としない場合があります。シングルトンを使用せずにこれを行うにはどうすればよいですか?これを美しく処理する方法が必要です。NSInvocationにはその能力があると思います。
objective-c - ARCでforwardInvocation'dメソッドにアクセスしますか?
forwardInvocation:を使用して、Objective-CでOpenStructのクローンを作成しています。ただし、コンパイラはコンパイル時に転送を認識していないようです。ARC でコンパイルすると、大量の警告が表示されます。
コードはオープン ソースであり、Githubで入手できますが、現在は -fno-objc-arc でコンパイルされています。この ARC と互換性を持たせる方法を誰かが見てくれたら、とてもありがたいです。
objective-c - NSOperation 内でブロックを実行する
ブロックを使用して何らかのタスクを実行するクラスのメソッドがあります。NSInvocationOperation を使用してそのメソッドを実行すると、制御がブロックに移動することはありません。ブロック内でログを記録しようとしましたが、実際には呼び出されません。しかし、単にそのクラスのインスタンスでそのメソッドを呼び出すと、すべてが期待どおりに機能します。
ブロックは NSOperation 内で実行されませんか?