後続のコードをトリガーする前に、Objective-C コードが UIAlertView からのユーザー入力を適切に待機するようにするには、多くの問題があります。たとえば、次のコードがあります。
if (!self.currentUser) [self displayLoginUIAlertView];
Program *program = [[Program alloc] initWithUser:self.currentUser];
[program startProgram];
どこProgram
がカスタム オブジェクトで、どこからのユーザー入力[self displayLoginUIAlertView]
がプロパティを設定するかself.currentUser
。
2 行目と 3 行目 (とには、View Controller 内のさまざまな種類のアラート ビューの数を制限しようとしているため、入れたくないでしょう。さらに、独自のカスタムの完全モーダル UIAlertViewオブジェクト(オンラインのいくつかのソリューションが示唆しているように見えます)。Program *program
[program startProgram]
alertView:didDismissWithButtonIndex
私が探している答えは、UIAlertView オブジェクトを超えて一般化できることを願っており、Objective-C の行が完全に実行されるのを待ってから次のコード行に進む方法についてのより一般的な質問に答えるのに役立ちます。私も次のことを試しました:
if (!self.currentUser) [self displayLoginUIAlertView];
while (!self.currentUser) wait(1);
Program *program = [[Program alloc] initWithUser:self.currentUser];
[program startProgram];
ただし、これは (当然のことながら) 無限ループにつながり、アラート ビューが表示されず、ユーザー入力がロックアウトされます。
ブロックの使用を検討しましたが、その構文に非常に混乱しています。ブロックは解決策ですか?それとも、私は間違った質問をしていますか?