繁体   English   中英

获取 ViewController 的当前实例

[英]Getting the current instance of ViewController

我正在实施一个登录系统。

LoginViewController处理这个系统的视图(废话!), LoginSession是一个处理当前会话的身份验证和存储的单例,身份验证是通过 RestKit 进行的。

//LoginViewController.m
- (IBAction)loginButtonPress:(id)sender {
    (...)
   [[LoginSession sharedInstance] authenticateUser:[username text] withPassword:[password text] andDomain:[domain text]];
}


//LoginSession.m
- (void) authenticateUser:(NSString *)userName withPassword:(NSString *)password andDomain:(NSString *)domain{
    (...)
     RKRequest * loginRequest = [[RKClient sharedClient] get:@"/login" queryParameters:loginData delegate:self];
    (...)
}

完成此请求后,它会调用委托:

//LoginSession.m
- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response;

其中需要回调 LoginViewController,以显示错误或允许用户访问应用程序。

我尝试使用 Storyboard 实例化LoginViewController ,但事实证明它正在创建一个新实例:

//LoginSession.m
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
    
LoginViewController *loginViewController =
(LoginViewController *)[mainStoryboard instantiateViewControllerWithIdentifier: @"loginViewController"];

我什至尝试将LoginViewController's self存储在LoginSession的属性中LoginSession出现错误)

//LoginSession.m
@property (strong, retain) LoginViewController *loginViewController;

那么,联系ViewController的当前活动实例的正确方法是什么?

您可以使用

  • 委托模式,在 iOS 中随处可见
  • 通知模式,例如 NSNotificationCenter
//LoginSession.h
@property (strong, retain) LoginViewController *loginViewController; 

@synthesize loginViewController;

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil];
loginViewController =
(LoginViewController *)[mainStoryboard instantiateViewControllerWithIdentifier: @"loginViewController"];

推送或呈现 loginViewController

并使用 loginViewController 调用委托方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM