2011-04-08 36 views
0

我正在開發一個應用程序。 我用TabBar和每個選項卡有它的類(FirstViewController,SecondViewController,...) 也有一個AppDelegate。Iphone:無法識別的選擇器發送到實例&viewDidLoad沒有運行

當我啓動程序時,第一個類正在運行。 當我選擇第二個選項卡時,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

我們需要查看您稱之爲「testauthentication」的代碼,以便有機會查看問題出在哪裏。 – scalbatty 2011-04-08 12:10:08

+0

NSLog(@「testAuthentication」);是當前方法中的唯一代碼(並且不運行...確實) – clement 2011-04-08 14:07:03

回答

1

你的第三個視圖控制器實際上並沒有創建一個實例,因此沒有實例方法可以被調用。修復你的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:包:初始化)現在initWithFrame:已成爲指定的初始化程序

+0

我已經更改了初始化方法,請嘗試使用-initWithNibName:bundle:方法,此方法保證位於任何UIViewController子類上。 – 2011-04-08 14:56:09

+0

對不起,但我很疑惑爲什麼你有這些問題。我想你已經使用圖形界面設計器來創建視圖控制器?我通常在代碼中爲iPhone創建GUI,因爲它更靈活。我也猜想你是新手來編程ObjC/iPhone?如果這是真的,我建議你重新開始,但在代碼中構建整個視圖層次結構,而不使用任何圖形設計工具。無論如何,這是一種更靈活的方法(例如,允許查找/替換操作)。 – 2011-04-12 11:16:13

0

在視圖控制器設置類。

然後嘗試。

0

檢查Object在這你呼籲testAuthentication

可能是你正在secondViewController的對象上調用testAuthentication,只是檢查並讓我們知道

+0

[鏈接](http://www.imagup.com/data/1116934918.html)界面生成器似乎設置正確 – clement 2011-04-08 13:32:46

+0

我不明白在哪裏創建對象: -/ – clement 2011-04-11 07:08:33

+0

在哪裏可以實例化類(通過單擊選項卡)? – clement 2011-04-11 09:59:36

0

第一次獨自viewController將來自viewDidLoad之後,它不叫viewDidLoad而是它調用viewWillAppear。所以你可以在viewWillAppear中任何你想要的代碼。

相關問題