0

ビューが表示されたらすぐに(ボタンを使用せずに)アラートビューを表示しようとしています。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の新しいビューに接続しましたが、まだ運がありません

4

4 に答える 4

2

問題は、2 つのコア アニメーション (現在のビューを表示するためのアニメーションと、アラートを表示するためのアニメーション) が重複していることです。次の回避策に従って、これら 2 つのアニメーションの動きを分離する必要があります。

  1. viewDidAppearではなく、アラート コードをviewWillAppear

  2. コールし[alert performSelector:@selector(show) withObject:nil afterDelay:0.0]ます。これにより、現在のアニメーションが終了した後にアラートが発生することが保証されます。

alertまだリリースには注意が必要かもしれません。私があなたなら、別のメソッド (例: showHelloAlert) を用意し、viewDidAppear から呼び出します。

- (void)viewDidAppear: (BOOL)animated {
  [self performSelector:@selector(showHello) withObject:nil afterDelay:0.0f];
  [super viewDidAppear:animated];
}
于 2009-12-01T00:06:53.177 に答える
0

アラートをviewDidAppearに入れてみてください。

また、iboutletは何のためにありますか?全部取り出してみてください。

于 2009-11-30T23:54:56.930 に答える
0

Interface Builder で xib ファイルを開き、ファイルの所有者 ( class である必要がありBatteryAppViewControllerます) からビュー (アラートではない) にコントロール ドラッグし、ポップアップするメニューからビューを選択します。ログは、このコンセント接続を確立していないことを示しています。

于 2009-12-01T00:07:36.870 に答える
0

Interface Builder で UIAlerts を接続しません。アラートにはカスタマイズ可能なペン先がないため、インターフェース ビルダーにロードできません。以下を削除する必要があります。

IBOutlet UIView *alert;

...完全に。

エラー メッセージは、View Controller にビューが定義されていないことを示しています。Interface Builder で設定する必要があります。

于 2009-12-01T00:08:55.577 に答える