LoginSignup
5
4

More than 3 years have passed since last update.

[Xcode][エラー]Error Unbalanced calls to begin/end appearance transitions for エラーが出た時の対処法

Last updated at Posted at 2016-09-12

Unbalanced calls to begin/end appearance transitions for ほげほげ

本来表示する画面の前にログイン画面をかまそうとした時にタイトルのようなエラーログにでることがありました。
調べてみたところ致命的なエラーではないみたいです。

原因は、現在表示している viewController の viewDidLoad 内で他の viewController を表示しようとした場合に起きます。
ログイン画面に切り替えなどで viewDidLoad に呼び出した時ですね!

確かに、ビューがまだ生成していないところのビューにビューコントローラーで画面を切り替えようとしていますからね!

実際にエラーになるコードと修正してエラーがなくなるコードを紹介します。

実際にエラーになるコード


@interface MainViewController ()

@property (nonatomic,assign) BOOL isLogin;

@end

@implementation MainViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    _isLogin = NO;
    // Loginしているかどうかのユーザーデフォルト情報を取得
    _isLogin = [userDefaults boolForKey:@"isLogin"];
    //ログインしてない場合
    if (!_isLogin) {
        // ログイン画面のビューコントローラを作成する
        LoginViewController *loginViewController = [LoginViewController alloc] init];
        // ナビゲーションコントローラを作成する
        UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:loginViewController];
        navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
        // モーダルビューとして表示する
        [self presentViewController:navigationController animated:YES completion:nil];
    }
}

修正してエラーがなくなるコード


@interface MainViewController ()

@property (nonatomic,assign) BOOL isLogin;

@end

@implementation MainViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    _isLogin = NO;
    // Loginしているかどうかのユーザーデフォルト情報を取得
    _isLogin = [userDefaults boolForKey:@"isLogin"];
}

- (void)viewDidAppear:(BOOL)animated
{    
    // ログインしていない場合
    if (!_isLogin) {
        // ログイン画面のビューコントローラを作成する
        LoginViewController *loginViewController = [LoginViewController alloc] init];
        // ナビゲーションコントローラを作成する
        UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:loginViewController];
        navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
        // モーダルビューとして表示する
        [self presentViewController:navigationController animated:YES completion:nil];
    }
}

以上のように viewDidLoad で行っていた処理を viewDidAppear:(BOOL)animated に移行するといいそうですね。

いろんなパターンがあると思うのでその他にあれば教えてください♫

関連ワード
・XCode error - XCode エラー
XCode warning - XCode 警告

随時、変更記事、体裁を整えていきます。

関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ


制作チーム:サンストライプ

sunstripe_logo.png
http://sunstripe.main.jp/

(月1WEBコンテンツをリリースして便利な世の中を作っていくぞ!!ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中!!)

地域情報 THEメディア

THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます!!
https://the.themedia.jp/

ゼロからはじめる演劇ワークショップ

多様化の時代に向けて他者理解を鍛える

プログラミングワークショップ・ウェブ塾の開講!!!

様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
プログラミングサロン 月1だけのプログラミング学習塾

協力応援 / 支援者の集い

チーム:サンストライプ

プログラミングラボ

一緒にポートフォリオを作りませんか?現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週1のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております!!

興味がある方は、DMに話しかけてみてください。

トラストヒューマン

http://trusthuman.co.jp/
私たちは何よりも信頼、人と考えてます。

「コンサルティング」と「クリエイティブ」の両角度から「人材戦略パートナー」としてトータル的にサポートします!!

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4