2012-11-10 96 views
0

使用故事板我有一個表視圖控制器的行列表。當選中一行時,我想將與該行關聯的數據傳遞給嵌入在UINavigationController中的另一個表視圖控制器。Segue從TableViewController到另一個TableViewController

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

    if ([segue.identifier isEqualToString:@"EditJob"]) 
    { 
     NewJobsTableViewController *newJobsTableViewController = segue.destinationViewController; 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 

     Jobs *job = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
     newJobsTableViewController.jobDetails = job; 

    } 
} 

在prepareForSegue方法我收到以下錯誤中的最後一行:
[UINavigationController的setJobDetails:]:無法識別的選擇發送到實例0x83a7780 2012年11月11日08:50:25.335我的交易[40612:C07] *終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因: ' - [UINavigationController的setJobDetails:]:無法識別的選擇發送到實例0x83a7780'

jobDetails在newJobsTableViewController聲明爲:

@interface NewJobsTableViewController : UITableViewController <UITextFieldDelegate,  NSFetchedResultsControllerDelegate> { 
    Jobs *_jobDetails; 
} 

@property (strong, nonatomic) Jobs *jobDetails; 

我不確定爲什麼會導致此錯誤。

+0

您是否嘗試登錄您的控制器? – Stas

回答

1

這聽起來像你讓你的故事板設置錯誤。第二個tableViewController不應該嵌入到它自己的導航控制器中。從第一個tableViewController到第二個設置一個push segue - 第二個會自動嵌入到第一個導航控制器中。

的原因的錯誤,我想,是因爲目標視圖控制器實際上是您在嵌入式第二視圖控制器導航控制器此行不會做你希望它做什麼。

NewJobsTableViewController *newJobsTableViewController = segue.destinationViewController; 

即使您將destinationViewController的返回值設置爲您的類,它將返回實際的值 - 我敢打賭,如果您記錄了newJobsTableViewController類,它實際上會以UINavigationController的形式返回。

+0

那你如何檢索NewJobsTableViewController? – Stas

+0

@Stas,只是不要在自己的導航控制器中嵌入第二個表視圖控制器,那麼該行將檢索NewJobsTableViewController。 – rdelmar

+0

謝謝。我試圖重新使用NewJobsTableViewController來添加和編輯數據。所以我有了一個初始階段來添加新數據,但後來我又添加了另一個編輯數據的階段,這就是它出錯的地方。我只是將NewJobsTableViewController場景複製/粘貼到故事板上,然後將「編輯」segue重定向到副本,但都引用相同的類文件。 – rosst400

相關問題