2

ボタン「ログイン」を持つloginviewcontrollerクラスがあります。

ログイン クラスは、私の 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");
}

ただし、例外が発生し、理由がわかりません。ボタンから送信されたアクション内のタッチアップが正しい名前であることを確認しました。そして、私はアークを使用しています。ヘルプ!:)

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) 

私はまだこれにまったく慣れていません。クラスがプロパティである必要があるという可能な解決策が提案されました。これはどのように行われますか?ありがとう

4

3 に答える 3

3

IBoutlet が正しく接続されていれば、

LogInViewControllerivar またはプロパティとして作成します。オブジェクトは、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];
}
于 2013-10-28T14:23:47.850 に答える
0

viewDidLoad が終了すると、logIn オブジェクトが解放されます。メイン ビュー コントローラー ビューに追加しているため、そのビューだけが残ります。そのため、ボタンをタップすると、もう存在しないオブジェクトにメッセージが送信されます。

あなたがやろうとしていることは概念的に間違っていると言わせてください。ログインView Controllerを階層に追加して、それを提示したり、プッシュしたり、別のView Controllerに含めたりする必要がありますが、ビューを取得して追加するためだけに作成する必要はありません別のViewControllerに。

于 2013-10-28T14:28:24.350 に答える