2

私は「ちょうど良い」動作をしている親ビューコントローラに戻り、「コードは変更されていません」というモーダルビューをいくつか持っています。 - 古典的な問題の説明。iPad:モーダルビューを表示し、parentViewControllerがゼロになりましたか?

私はモーダルビューを解除し、親ビューコントローラはnilでデバッグしました。問題は説明されていますが、原因は説明されていません。私はSDKを4.1.2から4.2にアップグレードして、iOS 5での作業を開始できるようになりました。私は新しいメモリ管理ARCと私のスタイルのautoreleaseとretain/releaseの疑いがあります。

- (IBAction)doInfo:(id)sender { 
    NSLog(@"%s", __FUNCTION__); 
    AboutViewController *aboutViewController = [[[AboutViewController alloc] initWithNibName:@"AboutViewController" bundle:[NSBundle mainBundle]] autorelease]; 
    if (aboutViewController) { 
     aboutViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
     aboutViewController.hidesBottomBarWhenPushed = YES; 
     self.navigationController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
     self.navigationController.navigationBarHidden = YES; 
     [self presentModalViewController:aboutViewController animated:YES]; 
    } 
} 

「完了」ボタンを押した後、その親に戻すAboutViewControllerに解任された後:後

AboutViewControllerに私rootviewコントローラからのコードです。

- (IBAction)doDone:(id)sender { 
    NSLog(@"%s", __FUNCTION__); 
    [[self parentViewController] dismissModalViewControllerAnimated:YES]; 
} 

OK ...次のように変更して修正しました。今、問題はなぜこれが以前に働いたのですか?引用

- (IBAction)doDone:(id)sender { 
    NSLog(@"%s", __FUNCTION__); 
    [self dismissModalViewControllerAnimated:YES]; 
} 

答えて

6

[1]プロパティparentViewControllerについて:

、iOSの5.0より前のビューは、親ビューコントローラを持っていなかったと、モーダルそれを提示されたビューコントローラを提示されていた場合返されます。これはもはやケースではない。 presentingViewControllerプロパティを使用して、プレゼンテーションビューコントローラを取得できます。

このようにして、これはなぜ以前に動作したのか、もはや動作しなくなった問題を解決します。 iOS 5用にビルドする場合は、presentingViewControllerプロパティを使用します。これは、親ビューコントローラ(またはこの場合はプレゼンテーション)がモーダルビューを閉じることをドキュメントから通知されるためです。しかし、iOS 4と5用のビルドの場合は、とにかくコールを適切なView Controllerに転送するときに、コードを適切な場所に置くことになります。

再コンパイルする前にアプリが完全にiOS 5で実行された場合、AppleはiOS5より前にコンパイルされたアプリケーションの古い動作を模倣したランタイムトリッキーを置くことになります。

[1]私はあなたがシームレスにそれを使用することができますiOSの5の上のiOS 4

それ自体を無効に

presentingViewControllerを追加カテゴリーを構築していhttp://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

+0

FYI - 。私は私のiOS5を持つ(目標5.0を除く)iOS4を持つiPad上のコード、iPadやシミュレーター5.0とターゲット4.1、4.2、4.3および5.0の順列をテストしました。それはあなたが見つけたものがドキュメントに記載されていることを確認します。 iOS 4コードがPresentingViewControllerを「見つからない」としてクラッシュする – mobibob

1

backward-modalを参照してください。

私にとってこれはあなたに恩恵があることを願っています。それはあなたのコードをよりきれいにする!

関連する問題