問題タブ [nsoperation]
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 - NSOperationsのキューとアプリケーション出口の処理
一連のを作成し、NSOperation
それらをキューで実行しようとしています。
それらはすべてシーケンシャルで、一度に1つずつ実行されます。
これらの操作は、Webからデータをフェッチし、コアデータ管理対象オブジェクトを作成して保存します。
アプリケーションが終了する状況をどのように処理しますか?操作はデタッチされたスレッドで実行されるので、現在の操作が「安全に」終了するまでメインスレッドを待機させるにはどうすればよいですか?スレッド(操作)が完了する前に終了して満足している状況があります。これは、アプリをさらに起動すると、ジョブが続行され、中断したところから再開されるためです。
どうもありがとう、
マイク
iphone - NSOperation の非同期メソッド
Facebook Connect から (FBConnect Objective-C 2.0 フレームワークを使用して) データを取得していますが、そのすべてを NSOperation で実行しています。同様に実行される他のいくつかの操作があり、これはそれらの1つであるため、NSOperationにあります。
問題は、すべての FBConnect 呼び出しが非同期であることです。このため、NSOperation のメイン メソッドはすぐに終了し、操作は完了としてマークされます。
これを克服する方法はありますか?FBConnect には同期オプションがないようです。
どうもありがとう、
マイク
iphone - iPhone/Cocoa Touch - マルチスレッドの問題 (Stanford Presence 3 プロジェクト)
問題がどこにあるかを確認するためにコードにブレークポイントを配置したところ、cellForRowAtIndexPath メソッドでセルをロードしているときに、特に適切な配列 (followeesPhotoURLs) から写真を取得しているときに、プログラムがクラッシュすることがわかりました。これは、配列が空であるためです。メイン スレッドは、インターネットからのダウンロード専用のスレッドの実行が終了する前にセルの読み込みメソッドを実行することを決定するため、写真はダウンロードされませんでした (実行が開始されます)。
コースのオーディターズ ディスカッション グループ ページを調べたところ、他の誰かが同じ問題を抱えていることがわかりましたが、スレッドでは問題が解決されず、メールを送信しても役に立ちませんでした: http://groups.google.com/group/iphone- appdev-auditors/browse_thread/thread/ccfc6ae99b4cf45d/ef1b8935e749c7c2?hl=ja&lnk=gst&q=presence3#ef1b8935e749c7c2
iphone - 同時および非同時の NSOperations のキューイングの問題
2 つの NSOperations を含む NSOperationQueue があり、1 に設定することでそれらを次々に実行するように設定されていますsetMaxConcurrentOperationCount
。
操作の 1 つは、Web から一部のデータを (もちろん別の操作スレッドで) 同期的に取得する標準の非同時操作 (単なるmain
メソッド) です。もう 1 つの操作は、非同期で実行する必要があるコードを使用する必要があるため、同時操作です。
問題は、同時操作が最初にキューに追加された場合にのみ機能することを発見したことです。非同時操作の後に来ると、奇妙なことにstart
メソッドは正常に呼び出されますが、そのメソッドが終了し、メソッドをコールバックするように接続をセットアップした後は、決して呼び出されません。その後、キュー内の操作は実行されません。start メソッドが返された後にハングアップし、URL 接続からのコールバックが呼び出されないかのようです。
並行操作が最初にキューに入れられた場合、すべて正常に機能し、非同期コールバックが機能し、完了後に後続の操作が実行されます。全然わからない!
以下の並行 NSOperation のテスト コードを見ることができます。
どんな助けでも大歓迎です!
メインスレッドの観察:
[start]
並行操作が最初にキューにある場合、メソッドがメインスレッドで呼び出されることを発見しました。ただし、キューの最初でない場合 (同時実行または非同時実行のいずれかの後)、[start]
メソッドはメイン スレッドで呼び出されません。これは、私の問題のパターンに適合するため、重要なようです。この理由は何でしょうか?
同時 NSOperation コード:
キューイング コード
delegates - NSOperation は NSXMLParser をキャンセルしません。クラッシュの原因となるデリゲートでメソッドを呼び出し続ける
別のスレッドで XML をダウンロードして解析しようとしています。
「コントローラー」を解放し、NSOperationQueue で cancelAllOperations を呼び出します。そして、nSXMLParser のデリゲートを nil に設定しようとする NSoperation にメソッド 'cancel' を実装します。
しかし、1 秒ほど後に NSXMLParser がまだ生きていて、そのデリゲート (現在は存在しません) のメソッドをキックして呼び出し、クラッシュを引き起こします。
私はそれを理解していません、私は何を間違っていますか?
iphone - ナビゲーション コントローラーの UITableView を使用した UIActivityIndicatorView
ユーザーが行をクリックすると、テーブルビューを備えた非常に単純なナビゲーションコントローラーであるアプリケーションに取り組んでおり、詳細ビューに移動します。
ただし、詳細ビューは Core Data からデータを取得します。読み込みに約 3 秒かかる比較的大量のデータを取得しています。
進行状況を表示するために、その UIActivityIndicatorView を追加したかったのです。
ユーザーが行をクリックするとアニメーションを開始しようとしたので、didSelectRowAtIndexPathでアニメーション化するように設定しました
何らかの理由で、詳細ビューをプッシュする前にアクティビティ インジケーターが開始されません。
理由はありますか?またはそのようなアイデアを実装するための最良の方法は?
〜アドハム
iphone - NSOperation performSelectorOnMainThread がクラッシュする
NavigationController のサブビューから NSOperation を呼び出しています。
Operation は、サーバーからいくつかのデータをロードし、それを解析してから、
仕事が終わったら。これは一般的に機能しています...
問題は、NSOperation がジョブを実行しているときにナビゲーション コントローラーから戻るボタンを押すと、アクションが割り当て解除されたインスタンスを参照するため、アプリがクラッシュすることです。
操作を保持しようとしましたが、それでもクラッシュします...
前もって感謝します
iphone - iPhone - NSOperation から戻る
NSOperation のサブクラスを使用して、いくつかのバックグラウンド プロセスを実行しています。ユーザーがボタンをクリックしたときに操作をキャンセルしたい。
これが私の NSOperation サブクラスの外観です
これが、このクラスのオブジェクトをキューに追加し、KVO 通知をリッスンする方法です。
operationQueue = [[NSOperationQueue alloc] init]; [operationQueue setMaxConcurrentOperationCount:5]; [operationQueue addObserver:self forKeyPath:@"operations" options:0 context:&OperationsChangedContext];
操作をキャンセルするには (たとえば、ボタンのクリックで)、-cancel を呼び出してみましたが、違いはありません。-finish も呼び出してみましたが、それでも何も変わりません。
操作をキューに追加するたびに、キューのサイズが増加するだけです。finish が呼び出されます (NSLog ステートメントを使用してチェックされます) が、操作は実際には終了しません。私はまだこれを正しく行っていると確信していません
誰かが私が間違っているところを教えてもらえますか?
どうもありがとう