2014-11-27 15 views
5

Ho creato l'app con il seguente codice. Funziona bene con iOS7 ma genera l'errore qui sotto quando corro con iOS8.[UINavigationController setGoalName:]: selettore non riconosciuto inviato all'istanza 0x7964e2c0

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

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

} 

mio GoalDetailsViewController.h

@interface GoalDetailsViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> 

@property (nonatomic) NSString *goalName; 

Grazie in anticipo.

+0

Impostare un punto di interruzione in 'prepareForSegue: sender:' ed esaminare 'destinationViewController'. Probabilmente non è un'istanza reale di 'GoalDetailsViewController', e quindi non riconoscerà il selettore' setGoalName: '. La mia ipotesi è che iOS 8 ti stia inviando un altro controller di visualizzazione che non ti aspettavi. – ravron

+0

Sembrerebbe che 'goalsDetailsViewController' sia un UINavigationController. –

risposta

10

Sembra che il tuo viewviewcontroller sia una sottoclasse di UINAvigationController.

Prova questo:

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

} 
+0

YourViewController * Controller = (YourViewController *) [segue.destinationViewController topViewController]; – IKKA

3

Il modo più semplice per gestire questo incidente potrebbe essere quella di fare semplicemente assicurarsi che il destinationViewController è del tipo che vi aspettate prima di tentare di impostare una proprietà su di esso. Qualcosa di simile a questo:

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

Questa modifica assicura che il destinationViewController è di tipo GoalDetailsViewController prima di trattarlo come tale.

Problemi correlati