无法识别的选择器发送到实例错误

时间:2012-09-27 01:32:44

标签: iphone objective-c xcode

我有两个观点。一种观点是注册视图。当用户单击注册UIBarButtonItem时,它会将它们带到该视图。在该视图中,还有另一个UIBarbuttonitem表示“Back” - 所以当用户点击该按钮时,它会将它们带到主视图上,该视图上有注册按钮。然后,如果用户再次单击“注册”按钮,则会抛出此错误;

2012-09-26 19:22:53.256 Users[14763:c07] -[Registration signUp:]: unrecognized selector sent to instance 0x747e5b0
2012-09-26 19:22:53.257 Users[14763:c07] *** Terminating app due to uncaught exception

UsersViewController.h

@interface UsersViewController : UIViewController
@property (nonatomic, strong) Registration *registration;

UsersViewController.m
Signup event:
    self.registration = [[Registration alloc]initWithNibName:@"Registration" bundle:nil];
    [self.view addSubview:self.registration.view];

Registration.h
    @interface Registration : UIViewController
    @property (nonatomic, strong) Registration *mainView; 

Registration.m
Back button Event
   self.mainView = [[Registration alloc]initWithNibName:@"UsersViewController" bundle:nil];     

[self.view addSubview:self.mainView.view]

1 个答案:

答案 0 :(得分:-1)

按下小节按钮时,处理代码应如下所示:

- (IBAction)showRegistration:(id)sender
{
    Registration *registrationViewController = [[Registration alloc] init];
    [self.navigationController pushViewController:registrationViewController];
}

确保您的主视图控制器嵌入在导航控制器中,操作系统应该为您完成剩余的工作。您的注册视图控制器上将有一个后退按钮,可以将您的用户带回上一个视图。 addSubview不是通常用于在这样的视图之间导航的方法。你也可以使用

[self presentViewController:registrationViewController animated:YES];

或者如果您使用的是故事板,

[self performSegueWithIdentifier:@"go to registration view"];

有很多方法可以做到这一点,但addSubview不是你正在寻找的机器人。

此外,您不希望为您呈现的视图控制器提供指向其演示者的属性。您应该阅读Cocoa中的委托设计模式。您需要为您的注册视图控制器提供一个委托属性,在呈现时将MainViewController指定为注册视图控制器的委托,然后为MainViewController实现一个委托回调方法,以便在您的注册视图时执行所需的任何工作控制器被解雇。