問題タブ [nsrunloop]
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.
cocoa - Cocoa でメインの実行ループを手放さずに、ループ内で NSOpenGLView を更新する
Cocoa/OpenGL アプリを作成しています。一度に約 2 秒間、すべてのビデオ フレームを制御し、デジタル IO デバイスに書き込む必要があります。openGL 呼び出しを行った後、メイン スレッドを手放した場合 (0.01 秒の間隔でタイマー ファイア メソッド内で openGL 呼び出しを行った場合など)、openGLview は への呼び出しごとに更新されますglFinish()
。
しかし、2 秒間の while ループのようにメイン スレッドをビジー状態にしておくと、openGl 呼び出しは機能しません (驚くべきことに、最初の呼び出しglFinish()
は機能しますが、残りは機能しません)。ドキュメントによると、glFinish
gl コマンドが実行されるまでスレッドをブロックする必要があります。ここで何が起こっているのかを理解するのを手伝ってくれるか、この問題の解決策を提供してください。明確にするために、Snow Leopard のすべてのデジタル IO ポートに書き込むことで、フレームを欠落させたり、各フレームの更新をマークしたりせずに、200 フレームを次々に提示したいと考えています (これには問題はありません)。
cocoa - タイマーから NSRunLoop を停止する
カウントダウンを表示するラベルを更新するタイマーを使用して RunLoop を作成しました。カウントダウンがゼロになったら RunLoop を停止する必要があります。タイマーが正常に終了した場合は、runUntilDate を使用できます。日付は現在の日付 + カウントダウンの時間です。問題は、ユーザーがカウントダウンが完了する前にボタンからキャンセルした場合です。RunLoop にキャンセル ボタン アクションから停止するように指示する方法がわかりません。RunLoop のコードは次のとおりです。
このメソッドは、各ループで 1 ずつ減らすようにラベルに指示するだけです。
キャンセル ボタンにラベルをゼロに変更するように指示し、実行ループ セレクターに値がゼロかどうかをチェックさせることはできますが、RunLoop 自体のセレクターに停止を指示することはできますか?
これらは私が見つけた最も近いものですが、RunLoops 独自のセレクター内からは機能しないようです。少なくとも、私が試した方法では機能しません。
基本的に、RunLoopに停止するようにボタンに指示するか、何らかの方法で独自のセレクターからRunLoopを停止する必要があります。
ありがとう。
cocoa-touch - NSNetService による同期 Bonjour 解決 (実行ループから制御を返すのに時間がかかるのはなぜですか?)
サービス名の Bonjour 解決を同期的に実行しようとしているため、NSNetService の netServiceDidResolveAddress() 呼び出しを適切に待機する方法を見つけようとしています。
私のコードは次のようになります。
そして、解決の成功を処理する私の関数は次のとおりです。
解決イベントが発生してから 1 秒ほどコードが実行され続ける限り、満足です。
実際に起こっていることは、解決が非常に迅速に行われ、netServiceDidResolveAddress() のコードが完了していることがわかりますが、runUntilDate から制御が戻るまで一貫して望ましくない 5 ~ 6 秒の待機があり、"...(実行後ループ) デバッグ ステートメント。
いくつかのメッセージ ボードを調べたところ、同様の質問がありましたが、それらの解決策 (CFRunLoopStop の使用など) は何の効果もないようです。
以下は、私が受け取るロギングの例です。
誰かが NSNetService 解決を使用して同期結果を取得する別の方法を教えてくれたり、ランループ関連のコードをリファクタリングしてこの (OS によって作成されたように見える) 5 ~ 6 秒の遅延を回避したりできる場合は、感謝します。
objective-c - 並行して実行される異なるクラスの複数の NSURLConnections
現在、iPad アプリケーションには UITableView と単純な UIView があります。それぞれがリモート Web サービスから同時にデータを取得する必要があります。各 ViewController で NSURLConnection を作成し、Web サービスへのリクエストを実行しますが、2 番目の ViewController はまったく何も返さないようです。
2 つの別々のリクエストを並行して実行することは可能ですか?
[[NSRunLoop currentRunLoop] run];
これまでに見つけたのは、このコンテキストでの使用方法がわかりませんが、使用するためのアドバイスです:/
前もって感謝します!
cocoa - NSWindowmakeKeyAndOrderFrontへの同期呼び出し
私はMacOS用の小さなCocoaアプリケーションを書いています。私の目標は、ウィンドウを表示してから、画面上のピクセルを読み取ることです。後半の方法はすでに知っていますが、先に進む前にウィンドウを表示するのに問題があります。私が見たところ、NSWindowのmakeKeyAndOrderFrontによってトリガーされるようなウィンドウの更新は延期されています。
私はまだCocoaに比較的慣れていませんが、基本的に次のようなことをしたいと思っています。
では、どうすればそのブロッキング操作を実行できますか?
iphone - NSDefaultRunLoopMode と NSRunLoopCommonModes
背後UIScrollView
にある大きなファイルMPMapView
などをダウンロードしようとすると、iPhone の画面に触れるとすぐにダウンロード プロセスが停止します。ありがたいことに、 Jörnによる素晴らしいブログ投稿では、接続に使用する別のオプションが提案されてNSRunLoopCommonModes
います。
これにより、NSDefaultRunLoopMode と NSRunLoopCommonModes の 2 つのモードの詳細を調べることができますが、アップルのドキュメントでは、
NSDefaultRunLoopMode
NSConnection オブジェクト以外の入力ソースを処理するモード。これは、最も一般的に使用される実行ループ モードです。
NSRunLoopCommonModes
この値をモードとして使用して実行ループに追加されたオブジェクトは、一連の「共通」モードのメンバーとして宣言されたすべての実行ループ モードによって監視されます。詳細については、CFRunLoopAddCommonMode の説明を参照してください。
CFRunLoopAddCommonMode
ソース、タイマー、およびオブザーバーは、1 つ以上の実行ループ モードに登録され、実行ループがそれらのモードのいずれかで実行されている場合にのみ実行されます。共通モードは一連の実行ループ モードであり、これらのモードで共有される一連のソース、タイマー、およびオブザーバーを定義できます。たとえば、特定の実行ループ モードごとにソースを登録する代わりに、実行ループの共通疑似モードに一度登録すると、共通モード セットの各実行ループ モードに自動的に登録されます。同様に、モードが共通モードのセットに追加されると、共通疑似モードにすでに登録されているソース、タイマー、またはオブザーバーは、新しく追加された共通モードに追加されます。
この2つを人間の言葉で説明できる人はいますか?
loops - 「モーダル ループ コード」がある場合のテーブル ビューのスクロールの問題
UITableView スクロールに問題があります。ビュー コントローラーで、tableview を追加し、presentModalViewController で表示します。ユーザーは、続行する前にテーブルビューでアイテムを選択する必要があるため、コードは選択を待機するのをブロックする必要があります。私はこのようなループを使用しました:
正常に動作しますが、テーブル ビューが右にスクロールしません。引っ張ればOKです。指を離してもテーブルは再描画されません。私はこれに夢中になります!!!
助けてください。
objective-c - @implementationセクションのコードをループします
配列からランダムな要素を選択するプログラムを作成しました。
「開始」ボタンを押したら、そのコードをループするにはどうすればよいですか?
「開始」ボタンを押すと、配列から新しい要素が選択され、5秒ごとにテキストフィールドに書き込まれるようにしたいと思います。回答ありがとうございます。
iphone - NSRunLoopでタイマーを正しく無効にする方法
アプリのサーバーからsecondsToEnd値を使用して情報を取得し、この情報を受信した後にカウンターを開始します。
私のプロジェクトにはスクロールビューが含まれているので、スクロールによるタイマーのロックを回避するには、次の方法でタイマーをNSRunLoopに追加します。
NSTimerプロパティを作成しました。これは、どのようにオリジナルで、タイマーであり、これは私のstartTimer関数のスニペット全体です。
startメソッドでチェックが無効になる理由は、secondsToEnd値が0に達した後、新しい値を受け取り、startTimerを再度呼び出すためです。
そして私のdeallocメソッドではこれがあります:
しかし、それは無効になりませんか?私は何が間違っているのですか?
objective-c - runMode:beforeDate: 中に iOS5 がクラッシュする:
アプリケーションと iOS5 b7 および GM バージョンとの互換性に問題があります。
この問題は、次のコード行で発生します。
EXC_BAD_ACCESS
いくつかの反復の後、シグナルでアプリがクラッシュします。
渡された反復回数はランダムです (2 から 7 まで)。
また、すべてが iOS4 および iOS3 で非常にうまく機能します。
同じ問題が Apple のサンプル: XMLPerformance Sampleで発生します。
これについてあなたはどう思いますか?
10 月 12 日に何千人ものユーザーが私のアプリを iOS5 にアップグレードしますが、AppStore でこのような奇妙なエラーがアプリに表示されるのは望ましくありません。