1

我在 iphone 开发中练习委托,但有问题

2012-05-12 21:21:54.279 DelegatePractice[2924:f803]-[secondViewController viewControllers]:无法识别的选择器发送到实例 0x6b61d10 2012-05-12 21:21:54.281 DelegatePractice[2924:f803] * 由于未捕获而终止应用程序异常'NSInvalidArgumentException',原因是: ' - [secondViewController viewControllers]:无法识别的选择发送到实例0x6b61d10' *第一掷调用堆栈:(0x13bb052 0x154cd0a 0x13bcced 0x1321f00 0x1321ce2 0x2596 0x436e1e 0x13bcec9 0x155c2 0x250d54 0x13bcec9 0x155c2 0x1555a 0xbab76 0xbb03f 0xba2fe 0x3aa30 0x3ac56 0x21384 0x14aa9 0x12a5fa9 0x138f1c5 0x12f4022 0x12f290a 0x12f1db4 0x12f1ccb 0x12a4879 0x12a493e 0x12a9b 0x1e98 0x1df5)

我想我正确地设置了代表:

委托视图控制器.m

- (void)secondViewControllerDidJump:
(secondViewController *)controller
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"jump"])
    {
        UINavigationController *navigationController = segue.destinationViewController;
        secondViewController *SecondViewController =[[navigationController viewControllers]objectAtIndex:0];
        SecondViewController.delegate = self;
    }
}

@end

secondViewController.h

@class secondViewController;

@protocol SecondViewControllerDelegate <NSObject>
- (void)secondViewControllerDidJump: (secondViewController *)controller;

@end

@interface secondViewController : UITableViewController

@property (strong,nonatomic) NSArray *choices;
@property (nonatomic, weak) id <SecondViewControllerDelegate> delegate;

- (IBAction)jump:(id)sender;

@end

secondViewController.m

- (IBAction)jump:(id)sender
{
    [self.delegate secondViewControllerDidJump:self];
}
4

3 回答 3

1

有同样的问题,我通过使用解决了:

secondViewController *SecondViewController = segue.destinationViewController;

基本上 segue.destinationViewController 返回一个视图控制器,所以使用它。

于 2014-03-13T19:40:13.387 回答
0

您的应用程序在以下几行中崩溃:

UINavigationController *navigationController = segue.destinationViewController;
secondViewController *SecondViewController =[[navigationController viewControllers]objectAtIndex:0];

您要求navigationControllerviewControllers,但日志清楚地表明navigationController不是a而是 a ,它响应选择器。UINavigationControllersecondViewController-viewControllers

确保它segue.destinationViewController真的返回一个UINavigationController.

于 2012-05-12T13:35:46.477 回答
0

试试这个

secondViewController *SecondViewController =[[self.navigationController viewControllers]objectAtIndex:0];
于 2012-05-12T13:37:26.370 回答