我正在开发一个应用程序。 我用了一个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
答案 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}}中编写你想要的任何代码。