2014-11-27 12 views
5

पर भेजा गया है मैंने निम्नलिखित कोड के साथ ऐप बनाया है। आईओएस 7 के साथ यह ठीक काम करता है लेकिन जब मैं आईओएस 8 के साथ चलता हूं तो यह नीचे की त्रुटि को फेंकता है।[UINavigationController setGoalName:]: अपरिचित चयनकर्ता उदाहरण 0x7964e2c0

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

मेरे 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"; 

} 

मेरे GoalDetailsViewController.h

@interface GoalDetailsViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> 

@property (nonatomic) NSString *goalName; 

अग्रिम धन्यवाद।

+0

'readyForSegue: प्रेषक:' में ब्रेकपॉइंट सेट करें और 'destinationViewController' की जांच करें। यह शायद 'लक्ष्य विवरण दृश्य नियंत्रक' का वास्तविक उदाहरण नहीं है, और इस प्रकार 'setGoalName:' selector को पहचान नहीं पाएगा। मेरा अनुमान है कि आईओएस 8 आपको एक और दृश्य नियंत्रक भेज रहा है जिसे आप उम्मीद नहीं कर रहे थे। – ravron

+0

ऐसा प्रतीत होता है कि 'targetDetailsViewController' एक UINavigationController है। –

उत्तर

10

ऐसा लगता है कि आपके गंतव्यदृश्य नियंत्रक UINAvigationController का उप-वर्ग है।

इस प्रयास करें:

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

आपका व्यू कंट्रोलर * नियंत्रक = (आपका दृश्य नियंत्रक *) [segue.destinationViewController topViewController]; – IKKA

3

सबसे आसान तरीका है इस दुर्घटना को संभालने के लिए बस यह सुनिश्चित करें कि destinationViewController प्रकार आप उम्मीद कर रहे हैं इससे पहले कि आप इस पर एक गुण सेट करने का प्रयास की है बनाने के लिए किया जाएगा। कुछ इस तरह:

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

यह परिवर्तन सुनिश्चित करता है कि destinationViewController इस तरह के रूप में यह इलाज से पहले तरह GoalDetailsViewController की है।

संबंधित मुद्दे