2014-11-27 15 views
5

Tôi đã tạo ứng dụng với mã sau. Nó làm việc tốt với iOS7 nhưng nó ném lỗi dưới đây khi tôi chạy với iOS8.[UINavigationController setGoalName:]: bộ chọn không được nhận dạng được gửi tới ví dụ 0x7964e2c0

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

} 

GoalDetailsViewController.h My

@interface GoalDetailsViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> 

@property (nonatomic) NSString *goalName; 

Cảm ơn trước.

+0

Đặt điểm ngắt trong 'prepareForSegue: sender:' và kiểm tra 'destinationViewController'. Nó có lẽ không phải là một thực thể của 'GoalDetailsViewController', và do đó sẽ không nhận ra bộ chọn' setGoalName: '. Tôi đoán là iOS 8 đang gửi cho bạn một bộ điều khiển xem khác mà bạn không mong đợi. – ravron

+0

Có vẻ như 'targetsDetailsViewController' là một UINavigationController. –

Trả lời

10

Có vẻ như bộ điều khiển đích của bạn là lớp con của UINAvigationController.

Hãy thử điều này:

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

Cách đơn giản nhất để xử lý vụ tai nạn này sẽ được đơn giản chắc chắn rằng destinationViewController là loại bạn đang mong trước khi bạn cố gắng để thiết lập một tài sản trên đó. Một cái gì đó như thế này:

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

Sự thay đổi này đảm bảo rằng các destinationViewController là loại GoalDetailsViewController trước khi điều trị nó như vậy.

Các vấn đề liên quan