問題タブ [nsinvocationoperation]

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.

0 投票する
3 に答える
232 参照

objective-c - NSInvocationOperation に複数の引数を設定する

-[NSInvocationOperation initWithTarget:selector:object:]呼び出されるメソッドの引数として渡されるオブジェクトを 1 つだけ受け入れます。2 つの引数を使用したい。どうやってやるの?

これは私のコードです:

0 投票する
1 に答える
244 参照

iphone - NSArrayでNSInvocationOperationを呼び出せないようです

URLから背景の画像を読み込もうとしています。私が渡すのがNSUrlだけであれば、コードはうまく機能します。追加の変数を使用してNSArrayを渡そうとすると、呼び出されません。

このコードはうまく機能し、LoadImage2が呼び出され、次にImageLoaded2が適切に呼び出されます。

このコードは機能しません。LoadImageが呼び出されることはありません:

LoadImageが呼び出されない理由を誰かが知っていますか?

ありがとう。

0 投票する
1 に答える
406 参照

ios - NSInvocationOperation から返された結果を取得する

呼び出しまたはメソッドの結果を返します。- (id)result 戻り値 メソッドによって返されるオブジェクト、またはオブジェクトでない場合は戻り値を含む NSValue オブジェクト。メソッドまたは呼び出しの実行が終了していない場合、このメソッドは nil を返します。

私はいつもnilイメージをつかみます。上記のコードの何が問題になっていますか?

0 投票する
2 に答える
451 参照

ios - NSInvocationOperation コールバックが早すぎます

同様の質問が何度か寄せられていることは知っていますが、この特定の問題を解決する方法を理解するのに苦労しています。これまでのところ、私が行ったことはすべてメイントレッドで実行されています。しばらく時間がかかる操作を実行する必要があることがわかりました。操作中に HUD をディスプレイに追加し、操作が完了するとフェードアウトしたいと考えています。

GCD について多くのことを読んだ (そしてかなり混乱した) 後、最も簡単な方法は、時間のかかるメソッドを NSInvocationOperation で呼び出し、それを新しく作成した NSOperationQueue に追加することであると判断しました。これは私が持っているものです:

これにより、HUD が表示され、マップ上にドットの描画が開始され、その操作が完了すると、HUD がフェードアウトすると予想されます。

代わりに、HUD を表示し、マップ上にドットの描画を開始し、ドットを描画しながら HUD の方向にフェードアウトします。私の NSLogs によると、HUD をフェードするメソッドを呼び出す前に約 4 分の 1 秒の遅延があります。その間、ドットの描画はさらに数秒間続きます。

HUD をフェードアウトする前にマップの描画が完了するまで待機させるにはどうすればよいですか?

ありがとう

追加するために編集:

次の変更を加えた後、ほとんど成功しています。

奇妙なことに、最初に timeConsumingOperation を呼び出し、次に showLoadingConfirmation、次に fadeConfirmation を呼び出しているようです。これは、これらのメソッド内で起動される私の NSLogs によるものです。

画面に表示される動作は次のとおりです。ドットが描画され、それに応じてマップがズームを調整し (timeConsumingOperation の一部)、HUD が画面に表示され、その後何も表示されません。timeConsumingOperation が完了するまで showLoadingConfirmation は発生せず、fadeConfirmation はまったく発生していないように見えますが、3 つの NSLog はすべて即座に表示されます。

これは非常に奇妙に思えますが、timeConsumingOperation の完了時に何かを発生させる方法があることを示唆しているようにも見えます。

これを追加してみました:

そしてこれも:

しかし、それらは何の違いもないようです。

0 投票する
1 に答える
408 参照

objective-c - 正しい使用法:NSOperationおよびNSInvocationOperation

私はNSOperationについて勉強していますが、自分の状況に合わせてNSOperationを実装する正しい方法に疑問があります。

私のアプリでは、バックグラウンドで多くの操作を実行したいと思います。私のアプリはデスクトップソフトウェアからデータをインポートできるため、状況によってはデータベースが非常に大きくなる可能性があります。これにより、データの読み取りと分析に数秒かかる可能性があり、この間UIをフリーズさせたくありません。

私がクラスを持っているとしましょう:

各heavyOpはに関連付けられClassXているため、同じクラスに属していることは理にかなっています。

私の質問と私のオプション:

1)?ClassXのサブクラスである必要がありますNSOperation

操作は1つのタスクを表す必要があることを理解しましたが、私のクラスでは3つの異なるタスクを提供しています。いくつかのカスタムコンストラクターを使用して実行を制御することもできますが、おそらく概念を破っていると思います。

2)使用NSInvocationOperationは正しいですか?キャンセルできません!

私はそのようなことができることを知っています:

しかし、私が呼び出すと[myQueue cancelAllOperations];、に存在しないため、ClassX応答しself.isCancelledませんNSInvocationOperation

このようなコードでクラスに認識を強制する[myOp addObserver:myClassX forKeyPath:@"isCancelled" options:NSKeyValueObservingOptionNew context:nil];ことはできますが、やはり概念を破っていると思います。

3)私の?NSOperationから各heavyOpメソッドのサブクラスを作成します。ClassX

それは多くのサブクラスを生成し、それを管理するのが難しいかもしれません、私はそれが正しいかどうかわかりません。

それで、問題を解決する正しい方法は何ですか?誰でもアドバイスをくれますか?たぶん、私が説明したオプションの1つが間違っています。不明な点がある場合は、質問してください。より適切に説明できるように努めます。

0 投票する
1 に答える
116 参照

animation - 終了する前に少なくとも1サイクルのUIImageViewアニメーションを取得します

私はObjectiveCとXコードを初めて使用し、UIImageViewアニメーションを少なくとも1サイクル完全に画面に表示したままにするのに問題があります。ボタンがタップされ、たくさんの保存と処理が行われるときのカスタム待機アニメーションとして使用しています。NSOpearationQueueを使用して、これらのアクションを別のスレッドで実行します。これが私のコードの最初の部分です:

私のアニメーションはViewDidLoadで定義されており、「myAnimation」と呼ばれています。これは、UIImageの配列から作成されたUIImageViewアニメーションです。すぐに非表示にして、必要なときに表示します。

次に、最後のキュー操作で

これらの保存操作が速すぎる場合、特にiPadで、myAnimationが2.5の期間を終了できないことを除いて、すべてが正常に機能しているようです。アニメーションを非表示にする前に、少なくとも1回は再生したいと思います。これを実装する方法はありますか?

0 投票する
1 に答える
171 参照

objective-c - 複数の URL に非同期 NSURLConnection を使用する方法

まず、iPad には接続を処理するための NIC (またはハードウェア) が 1 つしかないと思います。そのため、リクエストは順番にキューに入れられて処理され、同時に 2 つの接続が実行されることはありません。この推測は本当ですか?

UITabBar各タブのView Controllerが異なるJSONフィードURLをダウンロードして解析するコントローラーがあります。単一の URL からフィードをダウンロードし、それを解析して、作業が完了したときにビュー コントローラーの 1 つのデリゲート関数を呼び出すシングルトン クラスを作成しました。メインスレッドがハングアップしないように、非同期接続を使用することにしました。

URLConnection4Target * _conn = [[URLConnection4Target alloc] initWithRequest:request delegate:self startImmediately:NO];

したがって、タブはすべて同じウィンドウからアクセスでき (次々に移動するのではなく)、フィードごとに異なる URL を使用します。

私の問題は、シングルトン クラスで接続を設計して、その複数のビュー コントローラーを順次 (または可能であれば同時に) 処理する方法です。

ユーザーが1つのタブをクリックして、別のビューコントローラーから既にアクセス可能なオブジェクトにNSInvocationOperationアクセスするとどうなるかわからなかったので、使用しようとしました。NSURLConnection

0 投票する
0 に答える
197 参照

ios - nsoperation 使用中のコア データ エラー

並行するメソッドでいくつかのコアデータエンティティを使用しています(NSInocationOperationオブジェクト内にあります)...そして、このエラーが発生しています:

これを回避する方法は?このメソッドは、コア データ値を使用して何らかの計算を行うだけで、新しいエンティティは追加されず、エンティティは削除されず、変更もされません ...