2010-09-12 48 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