0

質問のタイトルを前もってお詫び申し上げます。自分の問題を簡潔に説明する方法がよくわかりません。

設定したこのデリゲートメソッドに問題があります。簡単なログイン画面をモーダルに表示しようとしています。私の問題は、ログインビューを閉じた後に呼び出されるメソッドを取得することです。

具体的には、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
4

2 に答える 2

1

代議員は赤いニシンです。

*キャッチされなかった例外'NSInvalidArgumentException'が原因でアプリを終了しています、理由:'-[LoginViewController login:]:認識されないセレクターがインスタンス[メモリアドレス]に送信されました

クラスのオブジェクトにLoginViewControllerメッセージが送信されたことを意味しますがlogin:、処理方法がわかりません。

アクションをと呼ばれるメソッドに接続しましたlogin:。コントローラーでは、アクションはとして定義されていloginます。どんな医者もあなたに言うように、結腸は非常に重要です。Interface Builderでアクションを切断して再接続するか、ログインメソッドの署名をから変更します

- (IBAction)login

- (IBAction)login:(id)sender
于 2012-07-20T13:23:23.730 に答える
0

あなたは2つのことのうちの1つをしているようです:

  1. モーダルビューコントローラをマッシュアップするとき、どこにもデリゲートを宣言していないようです。

    modalviewcontroller.delegate = self

  2. これが問題の原因であるかどうかはわかりませんが、LoginViewController.hに二重プロトコル宣言があります。これは過去に私の代理人のものを台無しにしました、そしてそれはあなたの問題を引き起こしているかもしれないし、引き起こしていないかもしれません。

于 2012-07-19T22:02:38.330 に答える