[UINavigationController setGoalName:]: unrecognized selector sent to instance 0x7964e2c0

非 Y 不嫁゛ 提交于 2020-01-22 20:37:32

问题


I have created the app with following code. Its working fine with iOS7 but it throws the below error when I run with iOS8.

[UINavigationController setGoalName:]: unrecognized selector sent to instance 0x7964e2c0

My firstViewcontroller.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

GoalDetailsViewController *goalsDetailsViewController = segue.destinationViewController;
NSLog(@"%@",[NSString stringWithFormat:@"%@", [[self.arrCategoryTitle objectAtIndex:indexPath.row] objectAtIndex:indexOfCategory]]);
goalsDetailsViewController.goalName = @"Exercise Daily";

}

My GoalDetailsViewController.h

@interface GoalDetailsViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

@property (nonatomic) NSString *goalName;

Thanks in advance.


回答1:


Seems like your destinationviewcontroller is a subclass of UINAvigationController.

Try this:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

GoalDetailsViewController *goalsDetailsViewController = [(UINavigationController*)segue.destinationViewController topViewController];
NSLog(@"%@",[NSString stringWithFormat:@"%@", [[self.arrCategoryTitle objectAtIndex:indexPath.row] objectAtIndex:indexOfCategory]]);
goalsDetailsViewController.goalName = @"Exercise Daily";

}



回答2:


The easiest way to handle this crash would be to simply make sure that the destinationViewController is of the type you're expecting before you attempt to set a property on it. Something like this:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    GoalDetailsViewController *goalsDetailsViewController = segue.destinationViewController;
    NSLog(@"%@",[NSString stringWithFormat:@"%@", [[self.arrCategoryTitle objectAtIndex:indexPath.row] objectAtIndex:indexOfCategory]]);

    if ([segue.destinationViewController isKindOfClass:[GoalDetailsViewController class]]) {
        GoalDetailsViewController *goalsDetailsViewController = segue.destinationViewController;
        goalsDetailsViewController.goalName = @"Exercise Daily";
    }
}

This change ensures that the destinationViewController is of kind GoalDetailsViewController before treating it as such.



来源:https://stackoverflow.com/questions/27172933/uinavigationcontroller-setgoalname-unrecognized-selector-sent-to-instance-0x

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!