Iphone:无法识别的选择器发送到实例& viewDidLoad未运行

时间:2011-04-08 11:53:33

标签: iphone selector

我正在开发一个应用程序。 我用了一个TabBar,每个标签都有它的Class(FirstViewController,SecondViewController,...) 还有一个AppDelegate。

当我启动程序时,第一个类正在运行。 当我选择第二个标签时,Secondview。xib正在运行,但“viewDidLoad”无效。 当我选择第三个标签时,那是相同的。

我在第三个标签上放了一些按钮,当我按下它时,我有一个

 > -[UIViewController testAuthentication:]: unrecognized selector sent to instance 0x5f16920
    2011-04-08 13:46:42.511 e-mars[19501:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController testAuthentication:]: unrecognized selector sent to instance 0x5f16920'

这是我的课程代码

SecondViewController.h

#import <UIKit/UIKit.h>
@interface SecondViewController : UIViewController {
}
@end

SecondViewController.m

#import "SecondViewController.h"
@implementation SecondViewController
- (void)viewDidLoad {
    [super viewDidLoad];
NSLog(@"viewDidLoad de SecondViewController");

NSURL *url = [NSURL URLWithString: @"http://iosdevelopertips.com/images/logo-iphone-dev-tips.png"];
UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]]; 

[self.view addSubview:[[UIImageView alloc] initWithImage:image]];
}

- (void)dealloc {
    [super dealloc];
}

@end

ThirdViewController.h

#import <UIKit/UIKit.h>

@interface ThirdViewController : UIViewController {
IBOutlet UITextField *login;
IBOutlet UITextField *motdepasse;
NSMutableData *responseData;
}
@property (retain, nonatomic) UITextField *login;
@property (retain, nonatomic) UITextField *motdepasse;
@property (retain, nonatomic) NSMutableData *responseData;
- (IBAction) testAuthentication: (id)sender;
- (IBAction) saveAuthentication: (id)sender;
@end

ThirdViewController.m

#import "ThirdViewController.h"

@implementation ThirdViewController

@synthesize login;
@synthesize motdepasse;
@synthesize responseData;

- (id)initWithFrame:(CGRect)frame {
    //if ((self = [super initWithFrame:frame])) {
        // Initialization code
    //}
    return self;
}

-(IBAction) testAuthentication: (id)sender {
    //NSLog(@"testAuthentication");
}


- (IBAction) saveAuthentication: (id)sender {
    NSLog(@"saveAuthentication");
}
- (void)dealloc {
    [login dealloc];
    [motdepasse dealloc];
    [responseData dealloc];
    [super dealloc];
}
@end

4 个答案:

答案 0 :(得分:1)

您的第三个ViewController实际上并不创建实例,因此无法调用实例方法。修复你的initWithFrame:方法。请记住:实例方法以“ - ”符号开头,类方法以“+”符号开头。

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithNibName:nil bundle:nil];
    if (self)) {
        // Initialization code
    }
    return self;
}

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle 
{
    return [self initWithFrame:CGRectZero];
}

- (id)init 
{
    return [self initWithFrame:CGRectZero];
}

修复此问题后,至少第三个ViewController中的viewDidLoad方法应该可以正常工作。

关于第二个ViewController,你能否展示一下你用来实例化ViewController的代码?

编辑:我做了一些更改,以确保 initWithFrame:始终在初始化时调用,以防您使用其他方法创建实例( initWithNibName:bundle: init ),现在 initWithFrame:已成为指定的初始化程序

答案 1 :(得分:0)

在Viewcontroller中设置类。

然后尝试。

答案 2 :(得分:0)

检查您所呼叫的Object testAuthentication

可能是你在secondViewController的对象上调用testAuthentication,请检查并告诉我们

答案 3 :(得分:0)

viewController第一次单独viewDidLoad来自viewDidLoad之后,它不会调用viewWillAppear而是调用viewWillAppear。所以你可以在{{1}}中编写你想要的任何代码。