問題タブ [nsoperationqueue]

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 投票する
2 に答える
391 参照

objective-c - NSOperationQueue: メイン スレッドのツールバーに UIBarButtonItem を追加できません

UIViewController で、ツールバーに UIBarButtonItem を追加したいのですが、新しいボタンが表示されません。私は何を間違っていますか?

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

iphone - NSOperationQueueでKVOを使用するときに、辞書の値を間違って変更しますか?

「iPhone3のその他の開発」の同時実行の章で例を試していましたが、KVONSOperationQueueを期待どおりに動作させることができません。を作成し、以下を使用してその配列をNSOperationQueue観察します。operations

最初NSOperationのものがキューに追加されると、その基になるoperations配列(iOSのドキュメントではKVOに準拠していると記載されています)に追加されると思います。したがって、変更ディクショナリで、からのマッピングと、NSKeyValueChangeKindKeyからのマッピングを検索します。追加されたに。しかし、私はどんな種類の価値も見ていませんでした。NSKeyValueChangeInsertionNSKeyValueChangeNewKeyNSOperationNSKeyValueChangeInsertion

デバッガーがプロであり、すべてであることは知っていますが、ここにコピーするのに役立つものを用意するために、オブザーバーメソッドを次のように開始しました。

そしてそれは印刷します:

(これは単に適切にオーバーライドするSquareRootOperation私のサブクラスであり、単にプロジェクト名です。)ただし、メソッドは1つの操作を挿入すると2回呼び出され、両方とも種類の値が1であることに注意してください。さらに、追加されたアイテムではなく、配列自体のようです。NSOperationmainStalledNSKeyValueChangeSettingNSKeyValueChangeInsertionnewValueoldValue

何か案は?ありがとう!

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

objective-c - NSOperationは新しいスレッドを生成しませんか?

いくつかのNSOperationsを含むNSOperationQueueがあります。コードの特定の部分が並行して実行されないようにしたい。私は次のようなNSLockオブジェクトを使用します。

残念ながら、「ロック」呼び出しをブロックする代わりに、次のエラーが発生します。

-[NSLockロック]:デッドロック('(null)')

調査の結果、すべてのNSOperationが同じスレッドで実行されているように見えることに気付きました。スレッドIDを次のように記録した後、その結論を導き出しました。

すべての操作は同じスレッドで実行されているようです。それらは操作として並行して実行されていますが。

それは理にかなっていますか?私は少し混乱しています。私は何かが恋しいですか?NSOperationとNSLockを一緒に使用することに問題がありますか?(そうでない場合は、エラーが私のコードにあると確信しています)

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

iphone - iPhoneで長く依存する非同期プロセスを設計して開始するための最良の方法は?

私はiPhoneアプリのデザインに取り組んでいます。私には、次のように高レベルで定義された、開始するためのかなり激しいプロセスがあります。

  1. ユーザーは、アプリ内購入のためにUITableViewからアイテムを選択します。
  2. ユーザーがUIで購入を確認します。
  3. 非同期プロセスはAppStoreに移動し、アイテムが以前に購入されたかどうかを確認します。そうでない場合、アイテムは購入されます。その後、iPhoneアプリにアイテムの購入が成功したことが通知されます。(以前に購入した場合、アプリは気にせず、手順4に進みます。)
  4. 次に、アプリはプライベートサーバーに移動して、購入したアイテムのデータをダウンロードします。
  5. 次に、アプリはデータをCoreDataにインポートします。

もちろん、プロセスの各ステップでエラーがユーザーに報告され、プロセス全体が停止します。

何が起こっているかを示すテキストとともに、ユーザーに優れたUIActivityIndi​​catorを提示するactivityIndi​​catorControllerというクラスがあります。プロセスの各ステップで、activityIndi​​catorのラベルを新しいステータスで更新する必要があります。

質問/懸念:

設計とコーディングの観点からすると、最も簡単なことは、すべてのステップで1つの大きなNSOperationを使用することです。しかし、これが後で私を悩ますかもしれないのではないかと心配しています。私は間違った道をたどり、後でたくさんのコードを切り離さなければならないことを望んでいません。

私の内臓は、3つの別々のNSOperations(OpInAppPurchase、OpDownload、OpImport)を実装する方が良いと言っています。ただし、後続の各操作は、前の操作に依存しているだけでなく、1つが失敗した場合は、残りのNSOperationsをまったく呼び出さないでください。しかし、これをどのように設計/コーディングするかはわかりません。

どんな助けでも大歓迎です。

編集:

これまでの皆さんの助けに感謝します。私が達成しようとしていることについては、ユーザーに操作をキャンセルしてほしくない。ただし、アプリで後続の操作をキャンセルできるようにしたいと思います。私が気づかず、試行錯誤(つまり「当たり前」の瞬間)によってのみ発見されたのは、操作が別のプロセスで開始されると、開始される子操作も同じ別のプロセスで実行されるということです。 。

以下にリンクされているAppleの記事を読んだ後、私は今の自分のニーズに合わせて、NSInvocationOperationが必要なことを正確に実行し、プロセスごとに個別のNSOperationオブジェクトを作成する必要がないことを発見しました。次に、失敗した場合はメインスレッドへのNSErrorオブジェクトを使用してコールバックを実行し、成功した場合はメインスレッドへの別のコールバックを実行します。

おそらく、ユーザーが将来キャンセルできるようにしたい他のプロセスがいくつかあり、他のイベントでNSOperationを使用します。

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

cocoa-touch - URLからUIImageを非同期で使用して画像を読み込む場合の大幅な遅延

URLから画像を読み込むiPadアプリを書こうとしています。次の画像読み込みコードを使用しています。

そのコードはすべて操作としてNSOperationQueueに追加されるため、非同期で読み込まれ、画像のウェブサーバーが遅い場合にアプリがロックされることはありません。NSLog行を追加して、このコードの実行が終了したときにコンソールで確認できるようにしました。

コードの実行が終了してから約5秒後に、アプリで画像が更新されることに一貫して気づきました。ただし、NSOperationQUeueに配置せずにこのコードを単独で使用すると、イメージがほぼ即座に更新されるようです。

ラグは完全に遅いWebサーバーが原因ではありません...Safariで画像のURLをロードでき、ロードに1秒もかかりません。または、NSOperationQueueなしで同じコードを使用してロードでき、はるかに高速にロードされます。 。

画像が表示されるまでの遅延を減らしながら、NSOperationQueueを使い続ける方法はありますか?

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

objective-c - IOS4.2 アプリが EXC_BAD_ACCESS で終了する

IOS3 で問題なく動作する iPad アプリが、IOS4.2 では失敗します。これには、オペレーション キューから http セッションを実行するクラスがあり、失敗はこのアクティビティにリンクされています。コンソール出力は次のとおりです。

NSZombies を有効にして実行しても何も明らかにならなかったため、コードに NSLog ステートメントを追加したところ、ローカル変数が変更されたときにクラッシュが発生することがわかりました。コードセクションは次のとおりです。

そして、コンソールログ出力は次のとおりです。

ステータスが読み取り専用になったようなものです(プロパティはアトミックおよび読み取り書き込みとして宣言されています)。

その他の関連情報は、サブビューが変更され、上記のルーチンの呼び出しがトリガーされることです。コードは次のとおりです。

誰もこのようなものを見たことがありますか?

次にどこを見るべきか誰か考えがありますか?

よろしくロビン

スタック トレースは次のとおりです。

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

iphone - for ループで NSOperation をキャンセルしますか?

NSOperationonを使用してバックグラウンド スレッドで検索を実装しようとしていiOSます。サブクラス化したくなかったNSOperationので、これが私がやっていることです:

search メソッドには、検索対象が配列内にあるかどうかをチェックする for ループが含まれています。NSOperationを呼び出して をキャンセルするとcancelAllOperations、for ループは引き続き配列を処理します。これを防ぎたいのですが、for ループ内からこれを呼び出すことが正当かどうか疑問に思っていました。

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

iphone - nsoperationqueue に autoreleasepool を適切に使用する方法

リファクタリング中のアプリがあり、UI がよりスムーズに実行されるようにマルチスレッドを実装しました。iPhone シミュレーターではリークは発生しませんが、iOS 4.2 で実行されている iPhone 3G でテストすると、メモリ リークが発生します。operationqueue を使用して autoreleasepool を実装する正しい方法について多くの検索を行いました。助けていただければ幸いです。

ビューコントローラーにnsoperationqueueを作成しました

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

iphone - NSOperationQueueと同じ順番でデータを受け取る

サーバーにヒットしてデータをもたらす NSOperation オブジェクトを追加し続ける NSOperationQueue があります。受信したデータを発射された順に保存する方法はありますか? たとえば、A、B、および C オブジェクトが ABC の順序で NSOperationQueue に追加されたとします。これで、3 つの A、B、C のそれぞれが、対応するスレッドにデータを取り込みます。配列の内容が「結果A」「結果B」「結果C」となるように、結果を同じ順序で配列に格納したい。この問題の解決策または正解への方向性を教えてください。みんなありがとう

EDITED-基本的に、サーバーからデータを取得する自動提案コンポーネントを設計したい(Googleアプリと同じ)、NSOperationQueueがこれを実装する最良の方法であると考えました。現在、maxConcurrentOperationCount を 1 に設定していますが、サーバーからのデータの受信が非常に遅いため、1 以上に設定したいと考えています。この質問に対する正しい解決策または方向性を指摘してください。ありがとう

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

iphone - NSOperationQueue を使用し、スライダー/ピッカーなどを変更しようとすると、iPhone デバイスで多数のリークが発生する

NSOperationQueue を使用し、スライダー/ピッカーなどを変更しようとすると、iPhone デバイスで多数のリークが発生します。

問題なくラベルを変更できますが、インターフェイス ビルダーで作成されたスライダーまたはピッカーを変更しようとすると、これらのリークが発生します。

以下のコード