我提前道歉問題標題。我不太清楚如何簡潔地描述我的問題。爲什麼我的委託方法在發送給委託後被髮送到其父視圖?
我在設置這個委託方法時遇到了麻煩。我試圖以模態方式呈現一個簡單的登錄屏幕。我的問題是我的登錄視圖得到一個方法後,我解僱它。
具體而言,Xcode中記錄此:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[LoginViewController login:]: unrecognized selector sent to instance [memory address]'
LoginViewController.h
#import <UIKit/UIKit.h>
@protocol LoginViewControllerProtocol;
@interface LoginViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *userNameTextField;
@property (weak, nonatomic) IBOutlet UITextField *userPasswordTextField;
@property (weak, nonatomic) IBOutlet UIButton *loginButton;
@property (nonatomic, weak) NSObject<LoginViewControllerProtocol> *loginViewControllerDelegate;
@end
@protocol LoginViewControllerProtocol <NSObject>
- (void)loginViewController:(LoginViewController *)controller didLogin:(NSString *)userName;
@end
LoginViewController.m
- (IBAction)login
{
if ([self.loginViewControllerDelegate respondsToSelector:@selector(loginViewController:didLogin:)]) {
[self.loginViewControllerDelegate loginViewController:self didLogin:self.userNameTextField.text];
}
}
委託:(TestViewController.m)
- (void)loginViewController:(LoginViewController *)controller didLogin:(NSString *)userName
{
[self dismissModalViewControllerAnimated: YES];
didLogIn = YES;
}
我看不出爲什麼委託方法被髮送回被撤銷的視圖。
任何幫助將不勝感激!
編輯: 我對此表示歉意。這發生在調用LoginViewController的視圖控制器中。委託方法在這裏也存在。
TestViewController.m
if (!didLogIn) {
//launch login view modally
LoginViewController* loginController = [[LoginViewController alloc] initWithNibName: @"LoginViewController" bundle: nil];
loginController.loginViewControllerDelegate = self;
loginController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
loginController.modalPresentationStyle = UIModalPresentationFormSheet;
NSLog(@"LoginViewControllerDelegate: %@", self.description);
NSLog(@"LoginViewController: %@", loginController.description);
[self presentModalViewController:loginController animated: YES];
TestViewController.h
#import <UIKit/UIKit.h>
#import "LoginViewController.h"
@class NuanceGuidHandler;
@interface TestViewController : UIViewController <LoginViewControllerProtocol>
@property (weak, nonatomic) IBOutlet UILabel *partnerGuidLabel;
@property (weak, nonatomic) IBOutlet UILabel *userGuidLabel;
@property (strong, nonatomic) NuanceGuidHandler *nuanceGuidHandler;
@property (nonatomic) BOOL didLogIn;
@end
在哪裏,你是如何設置您的代理? – EsbenB 2012-07-19 21:54:20
您不顯示委託值的設置位置。另外,在操作方法中關閉viewController是一個非常糟糕的主意。爲什麼不使用派遣到主隊列並在那裏執行(因此登錄控制器將處於靜默狀態)。 – 2012-07-19 21:59:58
委派方法不會被髮送回關閉的視圖。 'login:'方法是。通常,IBAction方法在頭文件中聲明爲:' - (IBAction)login:(id)sender'。你是如何將'loginButton'連接到'login:'方法的?還有其他的事情叫'login:'嗎? – 2012-07-19 22:09:31