我试图使用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
开始:实现
- (IBAction)getStarted:(id)sender
{
// Perform login
...
// Dismiss me
[self.delegate TNTLoginViewControllerDismiss:self];
}
TNTLoginViewControllerDismiss: 方法在委托中执行,用于关闭模态窗口
- (void)TNTLoginViewControllerDismiss:(TNTLoginViewController *)controller
{
[self dismissViewControllerAnimated:YES completion:nil];
}
一切都运转得很好,直到状态保存。简单来说,我不知道TNTLoginViewController如何保留其委托。我明白为什么不能:它只是一个指针!因此,我尝试了各种方法来推导代表:
1.恢复类:可悲的是,作为一个类方法,`viewControllerWithRestorationIdentifierPath:coder:`无法帮助我指向我特定的呈现视图控制器。 2.在Storyboard中将我的呈现VC设置为我的模态VC的委托:即使我的呈现VC的类在其头文件中公开采用了`TNTLogingViewControllerDelegate>`协议,Xcode也不会让我绘制该连接。这可能是一个单独的问题,或者可能不被允许。 3.使用应用程序委托级别的`application:viewControllerWithRestorationIdentifierPath:coder:`返回具有其委托设置为我的呈现视图控制器的模态视图控制器。我必须能够从应用程序委托派生出那个呈现VC,但它可能有效。
目前我选择第三种方法,但如果有更好的解决方案,我会非常高兴。可能会导致类似问题的设置:
1.设置数据源,例如表视图。