我有一个应用程序,它有一个名为MainViewController的第一个视图控制器,它类似于秒表,当我点击完成时,它会显示一个UIAlertView推送另一个视图控制器EndViewController,它显示秒表运行了多长时间以及多长时间它被暂停了。我收到以下错误:
My Point[851:c07] -[EndViewController topViewController]: unrecognized selector sent to instance 0x754db60
My Point[851:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[EndViewController topViewController]: unrecognized selector sent to instance 0x754db60'
有人能指出我的错误吗?
继承我的代码:
MainViewController.h:
#import "EndViewController.h"
@interface MainViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate, UIAlertViewDelegate>
@property (strong, nonatomic) IBOutlet UILabel *out;
@property (strong, nonatomic) IBOutlet UILabel *in;
@end
MainViewController.m:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"endtask"]){
UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
EndViewController *controller = (EndViewController *)navController.topViewController;
controller.timeIn.text=_in.text;
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
_alert = [[UIAlertView alloc] initWithTitle:@"Are you sure?"
message:nil
delegate:self
cancelButtonTitle:@"NO"
otherButtonTitles:@"YES", nil];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0) {
//do nothing
}
else if (buttonIndex == 1) {
[self performSegueWithIdentifier:@"endtask" sender:self];
}}
- (IBAction)endButton:(UIButton *)sender {
[_alert show];
}
- (IBAction)endButton:(UIButton *)sender {
[_alert show];
}
EndViewController.h:
@interface EndViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *timeIn;
@end
答案 0 :(得分:0)
您正在一个没有方法/属性的对象上调用名为topViewController
的方法。这就是这一行:
EndViewController *controller = (EndViewController *)navController.topViewController;
我怀疑它是因为您分配给navController
的视图控制器不是实际上导航控制器,而是其他东西。检查你的故事板/笔尖。
另外,正如一位评论员所说的那样,尝试记录navController
,并看看它给你带来了什么。
NSLog(@"%@", navController);
答案 1 :(得分:0)
如果你使用timeIn传递一个字符串,你应该在endViewController.h中有一个NSString的@property
@property (strong, nonatomic) NSString * timeIn ;
然后在你的endViewController.m中你将timeIn放入labe中。例如。
myLabel.text = timeIn;