分配块时发送到实例的无法识别的选择器 属性
Unrecognized selector sent to instance when assigning a block property
我有一个应用可能需要用户在导航过程中进行身份验证。如果是这种情况,我希望登录事件 return 回调到请求登录事件的操作,以便它知道登录是否成功。
例如,需要身份验证的方法将通过调用帮助程序的方法提示输入凭据 class:
[UserModel promptCredentials:^(NSHTTPURLResponse *response) {
if (response.statusCode == 200) {
[self userWillComment:userActionCell];
}
}];
辅助方法实例化登录视图控制器,并尝试设置回调属性:
+ (void) promptCredentials:(void (^)(NSHTTPURLResponse *response))callback{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *currentViewController = [[UIApplication sharedApplication] keyWindow].rootViewController;
LoginViewController *loginScreenNav = [storyboard instantiateViewControllerWithIdentifier:@"LoginNavigationController"];
loginScreenNav.loginCallback = callback;
if([currentViewController isKindOfClass:[UINavigationController class]]){
currentViewController = [(UINavigationController *)currentViewController visibleViewController];
} else if(currentViewController.presentedViewController){
currentViewController = currentViewController.presentedViewController;
}
dispatch_async(dispatch_get_main_queue(), ^{
[currentViewController presentViewController:loginScreenNav animated:YES completion:nil];
});
}
登录视图控制器在其接口中定义了以下 属性:
@property (nonatomic, strong) void (^loginCallback)(NSHTTPURLResponse *response);
当登录发生在 'LoginViewController' 内时,我正在尝试执行回调,如下所示:
if (self.loginCallback != nil) {
self.loginCallback(response);
}
但是,当此代码运行时,辅助方法 loginScreenNav.loginCallback = callback;
中的行使应用程序崩溃并出现错误:
-[UINavigationController setLoginCallback:]: unrecognized selector sent to instance
本质上,我需要一些关于如何在登录视图控制器中正确分配此 属性 块的指导,以便它可以在登录网络操作发生后执行。
崩溃的原因是您在这一行中对自己(和编译器)撒谎:
LoginViewController *loginScreenNav = [storyboard instantiateViewControllerWithIdentifier:@"LoginNavigationController"];
您已经从情节提要中实例化了一个视图控制器,是的;但它不是 LoginViewController。它是一个 UINavigationController。仔细检查你的故事板,查看标有 "LoginNavigationController"
标识符的视图控制器,你会发现这是真的。
我有一个应用可能需要用户在导航过程中进行身份验证。如果是这种情况,我希望登录事件 return 回调到请求登录事件的操作,以便它知道登录是否成功。
例如,需要身份验证的方法将通过调用帮助程序的方法提示输入凭据 class:
[UserModel promptCredentials:^(NSHTTPURLResponse *response) {
if (response.statusCode == 200) {
[self userWillComment:userActionCell];
}
}];
辅助方法实例化登录视图控制器,并尝试设置回调属性:
+ (void) promptCredentials:(void (^)(NSHTTPURLResponse *response))callback{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *currentViewController = [[UIApplication sharedApplication] keyWindow].rootViewController;
LoginViewController *loginScreenNav = [storyboard instantiateViewControllerWithIdentifier:@"LoginNavigationController"];
loginScreenNav.loginCallback = callback;
if([currentViewController isKindOfClass:[UINavigationController class]]){
currentViewController = [(UINavigationController *)currentViewController visibleViewController];
} else if(currentViewController.presentedViewController){
currentViewController = currentViewController.presentedViewController;
}
dispatch_async(dispatch_get_main_queue(), ^{
[currentViewController presentViewController:loginScreenNav animated:YES completion:nil];
});
}
登录视图控制器在其接口中定义了以下 属性:
@property (nonatomic, strong) void (^loginCallback)(NSHTTPURLResponse *response);
当登录发生在 'LoginViewController' 内时,我正在尝试执行回调,如下所示:
if (self.loginCallback != nil) {
self.loginCallback(response);
}
但是,当此代码运行时,辅助方法 loginScreenNav.loginCallback = callback;
中的行使应用程序崩溃并出现错误:
-[UINavigationController setLoginCallback:]: unrecognized selector sent to instance
本质上,我需要一些关于如何在登录视图控制器中正确分配此 属性 块的指导,以便它可以在登录网络操作发生后执行。
崩溃的原因是您在这一行中对自己(和编译器)撒谎:
LoginViewController *loginScreenNav = [storyboard instantiateViewControllerWithIdentifier:@"LoginNavigationController"];
您已经从情节提要中实例化了一个视图控制器,是的;但它不是 LoginViewController。它是一个 UINavigationController。仔细检查你的故事板,查看标有 "LoginNavigationController"
标识符的视图控制器,你会发现这是真的。