2013-10-28 164 views
2

我有一個loginviewcontroller類,它有一個「登錄」按鈕。發送到實例的無法識別的選擇器。 NSInvalidArgumentExpection

登錄類連接到我的mainmenuviewcontroller到uiview。此我連接如下

(mainmenuviewcontroller.h)

import <UIKit/UIKit.h> 
@interface ViewController : UIViewController 

@property (strong) IBOutlet UIView *loginView; 

@end 

(mainmenuviewcontroller.m)

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    LogInViewController *logIn = [[LogInViewController alloc] initWithNibName:@"LogInViewController" bundle:nil]; 
    [self.loginView addSubview:logIn.view]; 
    [self.loginView setClipsToBounds:YES]; 
} 

此時,一切都很好。我的loginViewcontroller在我的主菜單裏顯示niceley。

當按下loginviewcontroller上的登錄按鈕(顯示在主菜單的uiview中)時,它會調用下面位於其loginviewcontroller類中的方法。

(loginviewcontroller.h)

#import <UIKit/UIKit.h> 

@interface LogInViewController : UIViewController 
- (IBAction)loginButtonPressed; 

@end 

(loginviewcontroller.m)

- (IBAction)loginButtonPressed 
{ 
    NSLog(@"login Button Pressed"); 
} 

但是發生異常,我不知道爲什麼:我已經確保了潤色內發送動作從按鈕有正確的名字。我正在使用Arc。幫幫我! :)

2013-10-28 13:57:46.367 Headache Mbl[1593:60b] -[NSConcreteMapTable loginButtonPressed]: unrecognized selector sent to instance 0x17d4fa20 
2013-10-28 13:57:46.370 Headache Mbl[1593:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteMapTable loginButtonPressed]: unrecognized selector sent to instance 0x17d4fa20' 
*** First throw call stack: 
(0x2de2fe8b 0x385826c7 0x2de337b7 0x2de320b7 0x2dd80e98 0x305ea55f 0x305ea4fb 0x305ea4cb 0x305d60f3 0x305e9f13 0x305e9bdd 0x305e4c09 0x305b9f59 0x305b8747 0x2ddfaf27 0x2ddfa3ef 0x2ddf8bdf 0x2dd63541 0x2dd63323 0x32a742eb 0x3061a1e5 0x60bdd 0x38a7bab7) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 

我仍然是一個相當新的這個,一個可能的解決方案是建議類需要一個屬性。這是如何完成的?由於

回答

3

如果您已連接的IBOutlet中正確,

充分利用LogInViewController爲伊娃或財產。該對象在viewDidLoad的返回時失去其值。

@interface ViewController : UIViewController 
    { 
    LogInViewController *logIn; 
    } 
    @property (strong) IBOutlet UIView *loginView; 
@end 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    logIn = [[LogInViewController alloc] initWithNibName:@"LogInViewController" bundle:nil]; 
    [self.loginView addSubview:logIn.view]; 
    [self.loginView setClipsToBounds:YES]; 
} 
+0

對不起我仍然很新,你認爲你可以給我的如何使loginviewcontroller爲伊娃或財產的例子嗎?謝謝:) – Ryan

+0

@Ryan,只需申報它的課程級別即可。將編輯答案。 – Vignesh

0

當viewDidLoad中結束登錄對象將被釋放,只因爲你將它添加到主視圖控制器視圖,所以當你點擊按鈕,會發送消息到一個對象他認爲將生存是不存在了。

讓我說,它在概念上是錯誤的,你要做什麼,登錄視圖控制器應該被添加到層次結構,呈現它,推它,或包含在另一個視圖控制器,但不創建它只是爲了讓他查看並將其添加到另一個視圖控制器。

0
LogInViewController *logIn = [[LogInViewController alloc] initWithNibName:@"LogInViewController" bundle:nil]; 
[self addChildViewController:logIn]; 
[self.loginView addSubview:logIn.view]; 
[self.loginView setClipsToBounds:YES]; 

事實證明我需要添加視圖作爲子視圖控制器。一旦加載它從內存中刪除,但仍然顯示它。所以需要在孩子時加入。

:)

相關問題