iOS:在两个视图控制器之间共享数据时出错

时间:2013-04-02 22:44:32

标签: iphone ios uiviewcontroller

我有一个应用程序,它有一个名为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

2 个答案:

答案 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;