iOS 6 以降 (私のアプリは 7.0 以降) の状態保持を使用して、別のビュー コントローラーからモーダルに表示されるビューを保持しようとしています。そのため、典型的なモーダル ビュー コントローラーの却下パターンがあります。
TNTLoginViewController.h の内容
@protocol TNTLoginViewControllerDelegate <NSObject>
- (void)TNTLoginViewControllerDismiss:(TNTLoginViewController *)controller;
@end
@interface TNTLoginViewControllerDelegate : NSObject
@interface TNTLoginViewController : UIViewController
@property (weak, nonatomic) IBOutlet id <TNTLoginViewControllerDelegate> delegate;
- (IBAction)getStarted:(id)sender;
@end
getStarted: 実装
- (IBAction)getStarted:(id)sender
{
// Perform login
...
// Dismiss me
[self.delegate TNTLoginViewControllerDismiss:self];
}
TNTLoginViewControllerDismiss: モーダルを提示したデリゲートのメソッド
- (void)TNTLoginViewControllerDismiss:(TNTLoginViewController *)controller
{
[self dismissViewControllerAnimated:YES completion:nil];
}
そして、それはすべて魅力のように機能します!状態保存まで。簡単に言えば、TNTLoginViewController がデリゲートを保持する方法がわかりません。それができない理由を理解しています。それは単なるポインタです! そこで、代わりにデリゲートを導出するさまざまな方法を試しました。
- 復元クラス: 残念ながら、クラス メソッドとして
viewControllerWithRestorationIdentifierPath:coder:
、特定の提示ビュー コントローラーを指すのに役立ちません。 TNTLogingViewControllerDelegate>
ストーリーボードで、提示する VC をモーダル VC のデリゲートとして設定します。提示する VC のクラスがヘッダーでプロトコルを公に採用した場合でも、Xcode ではその接続を描画できません。それは別の問題かもしれませんし、許可されていないかもしれません。- application-delegate-level
application:viewControllerWithRestorationIdentifierPath:coder:
を使用して、モーダル ビュー コントローラーを返し、そのデリゲートを提示ビュー コントローラーに設定します。App Delegate からその提示 VC を取得できなければなりませんが、うまくいくかもしれません。
今のところ #3 を使用しますが、誰かが推奨できるより良い解決策があれば、私はわくわくします.
同様の問題が発生するセットアップ:
- テーブルビューなどのデータソースを設定します。