2014-10-19 37 views
0

我的應用程序委託方法中有一些代碼應該將對象發送給視圖控制器。出於某種原因,儘管它拋出一個錯誤:「無法識別的選擇發送到實例」應用程序委託:發送到實例的無法識別的選擇器

在視圖控制器我有以下變量設置:

@property (nonatomic, strong) Patient* patient; 

在我的應用程序代理的代碼如下所示:

UISplitViewController* splitViewController = (UISplitViewController*)self.window.rootViewController; 
UINavigationController* patientNavController = [splitViewController.viewControllers objectAtIndex:0]; 
PatientMasterTableViewController* patientMasterTableViewController = (PatientMasterTableViewController*)[patientNavController topViewController]; 
PatientDetailViewController* patientDetailViewController = [splitViewController.viewControllers objectAtIndex:0]; 

Patient* firstPatient = [[patientMasterTableViewController patientArray] objectAtIndex:0]; 
[patientDetailViewController setPatient:firstPatient];// this line throwing the error 

我是新來的iOS,我不太明白爲什麼它不會讓我通過病人對象。誰能幫忙?

+0

您是否在頭文件中設置了屬性? – gabbler 2014-10-19 05:17:42

+0

添加您正在獲取的異常的詳細信息 - 它會告訴您選擇器是什麼以及您嘗試將其發送到的對象類型。這將使你能夠找出你出錯的地方 – Paulw11 2014-10-19 05:29:52

+0

異常的細節: UINavigationController setPatient:]:無法識別的選擇器發送到實例0x8fa1380 2014-10-19 15:58:08.136 ORA [946:60b] * **因未捕獲異常'NSInvalidArgumentException'而終止應用程序,原因:' - [UINavigationController setPatient:]:無法識別的選擇器發送到實例0x8fa1380' – user2787386 2014-10-19 05:35:59

回答

1

這行代碼:

PatientDetailViewController* patientDetailViewController = [splitViewController.viewControllers objectAtIndex:0]; 

不保證返回PatientDetailViewController。它可以返回任何類的對象,並且不檢查返回的對象類。

你的應用崩潰了,因爲它返回了一個UINavgationController對象,該對象沒有setPatient方法。

至於爲什麼它返回錯誤類的對象,這將取決於您創建的視圖控制器。

0

你在你的代碼錯誤 - 看這兩條線:

的UINavigationController * patientNavController = [splitViewController.viewControllers objectAtIndex:0];

PatientDetailViewController * patientDetailViewController = [splitViewController.viewControllers objectAtIndex:0];

數組splitViewController.viewControllers只包含一個!縱向模式下的元素和橫向模式下的TWO元素。 DetailsViewController始終是這個數組中,但主並不:在縱向模式陣列只包含詳細視圖Ctrl鍵,在橫向排列爲@ [大師,詳情]

所以如果你想永遠得到DetailViewController使用此代碼

[[splitViewController viewControllers] lastObject];

相關問題