Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

iphone

ios7

ios8

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.

like image 738
Balaji Kondalrayal Avatar asked Nov 27 '14 14:11

Balaji Kondalrayal


2 Answers

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";

}
like image 54
gasparuff Avatar answered Nov 03 '22 01:11

gasparuff


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.

like image 42
ravron Avatar answered Nov 03 '22 01:11

ravron