2010-09-12 113 views
0
UIViewController *viewVC = nil; 
NSString *TcodeNib = [selectedObject valueForKey:@"ViewControllerName"]; 
// Create the next-level view controller 
if ([TcodeNib isEqualToString:@"FirstViewController"]) { 
    viewVC = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 
} else if ([TcodeNib isEqualToString:@"SecondViewController"]) { 
    viewVC = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
} 
viewVC.referringObject = [selectedObject managedObjectContext]; 
viewVC.referringTransaction = referringObject; 

加載的ViewController然而,編譯代碼時,我正在錯誤:動態地從TableView中行選擇

request for member 'referringObject' in something not a structure or union 

我收到的時候有固定視圖 - 控制值測試的條件下才能正常工作?任何建議請!

回答

4
UIViewController *viewVC = nil; 
[blah blah blah] 
viewVC.referringObject = [selectedObject managedObjectContext]; 
viewVC.referringTransaction = referringObject; 

不過,我正在編譯代碼當錯誤:那是因爲一個UIViewController沒有一個referringObject財產

request for member 'referringObject' in something not a structure or union 

。 (嘗試使用Clang而不是GCC進行編譯,它可能會給你一個更清晰的錯誤信息。)它也沒有referringTransaction屬性,所以如果你刪除第一個任務,你會得到第二個類似的錯誤一。

你宣佈viewVC作爲持有一個指向一個UIViewController,所以這是所有的編譯器知道:那viewVC將舉行要麼nil或指向一個UIViewController。它不會假定你可能正在實例化的UIViewController的子類。你說那個對象是一個UIViewController,所以你不能指定那個對象的屬性,因爲UIViewController沒有它們。

您需要聲明viewVC作爲持有指向確實具有這些屬性的對象的指針。既然你要存儲指向兩個不同的類(我假定這兩個類聲明,它們的實例有那些特性)的一個實例,有兩種解決方案:

  1. 作出這樣的聲明的兩個協議屬性,並使FirstViewController和SecondViewController聲明符合該協議,並將該變量聲明爲持有指向符合該協議的對象的指針。
  2. 使UIViewController的抽象子類聲明並實現兩個屬性,並創建抽象子類的FirstViewController和SecondViewController子類,並將該變量聲明爲持有指向抽象子類實例的指針。

我可能會做後者,並將目前在FirstViewController和SecondViewController之間複製粘貼的任何其他東西移動到抽象類中。

+0

感謝彼得,這就是我沒有想到的。我也已經按照你的第2點繼承了UiViewcontroller的子類,並且工作正常。謝謝您的幫助。 – Accilies 2010-09-13 00:19:47

0

添加

NSLog(@"Value of TcodeNib: %@",TcodeNib); 

後:

NSString *TcodeNib = [selectedObject valueForKey:@"ViewControllerName"]; 

它可能不是你的想法。

+0

這隻會在運行時幫助診斷問題;它不會告訴提問者關於編譯器錯誤的任何信息。 – 2010-09-12 21:34:22

+0

感謝您的回覆喬蘭,但我得到了預期的價值 2010-09-13 04:09:03.660 ApplicationDemo [6613:207] TcodeNib的價值:UserLookup – Accilies 2010-09-13 00:09:35