viewWillAppear、iPhoneでAlertViewを追加する
-
22-07-2019 - |
質問
ビューが表示されたらすぐに(ボタンを使用せずに)アラートビューを表示しようとしています。 viewcontroller.mには次のものがあります:
- (void) viewWillAppear:(BOOL)animated
{
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle: @"User Information" message: @"Hello"
delegate: self cancelButtonTitle:nil otherButtonTitles: @"Continue", nil];
[alert show];
[alert release];
}
およびviewcontroller.hで私が持っている:
IBOutlet UIView *alert;
.xibファイルには何もしていません。
シミュレータで実行すると、コンソールに次のメッセージが表示されます:
2009-11-30 23:41:36.079 BatteryApp [867:20b] ***キャッチされない例外 'NSInternalInconsistencyException'によるアプリの終了、理由: '-[UIViewController _loadViewFromNibNamed:bundle:]が" BatteryAppViewController"をロードしましたペン先がビューアウトレットが設定されていません。」
間違ったアイデア、xibに関係するもの
編集//アラートをxibの新しいビューに接続しますが、まだ運がありません
解決
問題は、2つのコアアニメーション(現在のビューを表示するためのアニメーションと、アラートを表示するためのアニメーション)が重複していることです。この回避策に従って、これら2つのアニメーションの動きを分離する必要があります。
-
viewWillAppear
ではなく、 -
[alert performSelector:@selector(show)withObject:nil afterDelay:0.0]
を呼び出します。これにより、現在のアニメーションの終了後にアラートが発生します。
viewDidAppear
にアラートコードを配置します。
alert
のリリースにはまだ注意が必要な場合があります。私があなただったら、別のメソッド(showHelloAlertなど)を用意して、viewDidAppearから呼び出します:
- (void)viewDidAppear: (BOOL)animated {
[self performSelector:@selector(showHello) withObject:nil afterDelay:0.0f];
[super viewDidAppear:animated];
}
他のヒント
viewDidAppearにアラートを入れてみてください。
また、iboutletは何のためですか?全部取り出してみてください。
Interface Builderでxibファイルを開き、ファイル所有者(クラス BatteryAppViewController
である必要があります)からビュー(アラートではなく)へのドラッグを制御し、ポップアップメニューからビューを選択します。 。ログは、このコンセント接続を行っていないことを示しています。
Interface BuilderでUIAlertを接続しません。アラートにはカスタマイズ可能なペン先がないため、インターフェイスビルダーに読み込むことはできません。以下を削除する必要があります。
IBOutlet UIView *alert;
...完全に。
エラーメッセージは、View Controllerにビューが定義されていないことを示しています。 Interface Builderで設定する必要があります。