相关疑难解决方法(0)

具有自定义代理或数据源的视图控制器的状态保留

我试图使用iOS 6+(我的应用程序是7.0+)State Preservation来保留从另一个View Controller以模态方式呈现的视图.因此,它具有典型的模态视图控制器解雇模式:

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
Run Code Online (Sandbox Code Playgroud)

getStarted:实现

- (IBAction)getStarted:(id)sender
{
    // Perform login
    ...

    // Dismiss me
    [self.delegate TNTLoginViewControllerDismiss:self];
}
Run Code Online (Sandbox Code Playgroud)

TNTLoginViewControllerDismiss:委托上的方法,它提供了模态

- (void)TNTLoginViewControllerDismiss:(TNTLoginViewController *)controller
{
    [self dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

这一切都像一个魅力!直到国家保护.简单地说,我不知道TNTLoginViewController如何保留其委托.我理解为什么它不能:它只是一个指针!所以我尝试了各种派生委托的方法:

  1. 恢复类:遗憾的是,作为一种类方法,viewControllerWithRestorationIdentifierPath:coder:并没有帮助我指出我具体呈现的View Controller.
  2. 将我的演示VC设置为故事板中的模态VC代理:Xcode不会让我绘制该连接,即使我的演示VC的类公开采用TNTLogingViewControllerDelegate>其标题中的协议.这可能是一个单独的问题,或者可能不允许这样做.
  3. 使用application-delegate-level application:viewControllerWithRestorationIdentifierPath:coder:返回一个模态视图控制器,其委托设置为我呈现的View Controller.我必须能够从App Delegate派生出VC,但它可能有效.

我现在要和#3一起去,但如果有更好的解决方案,有人可以推荐,我会很激动.

设置会产生类似的问题:

  1. 设置数据源,比如表视图.

delegates objective-c ios uikit-state-preservation

5
推荐指数
1
解决办法
817
查看次数