2016-04-08 6 views
0

私のアプリでは、ユーザーにPocketアプリケーションアカウントにログインさせる。 Pocket SDKはログインプロセスをSafariに転送します。ユーザーがログインしようとすると、ビューの切り替えが発生して自分のアプリに戻ります。iOS - ビューの遷移後に表示されるUIAlertControllerをスケジュールする

同時に、私のUIViewControllerはログインが成功したか失敗したかというNSNotificationを受け取り、私はそれが成功したかどうかをユーザーに表示するためにUIAlertControllerを表示しようとするたびに、私のログに何も起こらないと私は、次の取得コンソールは:

は、許可されていない割り当てを解除され、未定義の動作を引き起こす可能性がありながら

私は私のUIViewControllerがを提示しようとしているからだと仮定しているビューコントローラのビューをロードしようとすると、私のアプリはまだSafariから私のビューに移行中です。

ビューの移行が終了した後、これを確実に表示させるにはどうすればいいですか?UIAlertController

+0

通常、遷移の完了ブロックがあり、これだけあれば、そのブロックからのアラートを呼び出しますここに一つ。非表示の場合は、viewControllerのviewDidAppearにその警告を入れることができますが、警告が常に表示されないように、トランジションが初期化されたかどうかを確認するフラグを必ず追加してください。 –

答えて

1

ここでの問題は、あなた(またはUIAlertController)が不適切な時にビューコントローラの.viewプロパティにアクセスしていることです。表示がロードされていないときは、.viewに暗黙的にloadView(および次にviewDidLoad)がトリガーされます(isViewLoadedを参照)。

ここでは多くのオプションがあります。

最も簡単なのは、アラートを表示する必要があるかどうかをフラグするために、ビューコントローラにプロパティを追加するのが最も簡単な方法です。通知を確認したら、フラグをYESに設定します。その後、-viewDidAppear:では、フラグを確認し、アラートを表示し、フラグをNOに反転することができます。

また同様に、通知を受信した時点で確認し、「ショート」を追加することができます:

if (self.isViewLoaded) { 
    // show alert now 
} else { 
    self.needsShowAlert = YES; 
} 
関連する問題