質問

ビューが表示されたらすぐに(ボタンを使用せずに)アラートビューを表示しようとしています。 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つのアニメーションの動きを分離する必要があります。

  1. viewWillAppear

  2. ではなく、 viewDidAppear にアラートコードを配置します。
  3. [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];
}

他のヒント

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

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

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

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

IBOutlet UIView *alert;

...完全に。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top