0

アプリケーションで奇妙なバグが発生しました。ステップ実行を使用してデバッグしようとしています。

ただし、たとえば、この行をステップオーバーした場合など、iPhone での処理は、私が望むほど同期的に行われないことが多いようです [self.view addSubview:FinndomoEmbeddedMWView.view]; エミュレータでは何も起こりません。プログラムを実行させるだけで、ビューが追加され、画面が変更されます。

したがって、 addSubview はビューの追加に関連するすべてを行うわけではなく、プロセスを開始するだけで、後で完了すると推測しています。

winapiに似たios上にメッセージキューがあるかどうかはわかりませんが、そのようなものがあるはずなので、「蓄積されたメッセージをすべて処理する」機能はありますか?次に、この関数を addSubview の後に呼び出して、プログラムの実行中ではなく、デバッグ中にエミュレーターで実際に変化を確認したいと思います。

addSubview だけでなく、私はこれを経験しているので、このようなことに対する一般的な解決策が必要です。

4

2 に答える 2

1

昨日座って答えを見つけました:

NSDate *dtr = [[NSDate alloc] initWithTimeIntervalSinceNow:0.5];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:dtr];

これはが欲しかったものです。ご覧のとおり、この特定のコードは、イベントがそれ以上ない場合は 0.5 秒待機することになり、保留中のイベントがある場合は、最初のイベントのみを処理してから戻ります (ドキュメントによると)。

しかし、もちろんそれは避けることができます。これは単なる例であり、誰かが同じことを望む場合です. 私の場合、重要なイベントは 1 つしかなかったため、提供されたスニペットは機能しました。

于 2011-03-01T12:44:48.047 に答える
0

短い答えはノーです。

Cocoa はイベント駆動型です。

各アプリのコアはイベント ループです。イベント ループを通過するたびに、アプリはイベント キューに追加されたイベントを処理します。画面の更新はそのようなイベントの 1 つです。

したがって、画面表示の変更は、コードが返された後、次のイベント ループのパスまで行われません。

行ごとに何が起こっているかを把握したいデバッグ目的では、デバッガーの機能を使用するか、コードに NSLog ステートメントを追加する必要があります。

于 2011-02-28T15:22:29.697 に答える