Iphone “苹果可可”;错误:请求非结构或联合中的成员;

Iphone “苹果可可”;错误:请求非结构或联合中的成员;,iphone,objective-c,cocoa,cocoa-touch,uiviewcontroller,Iphone,Objective C,Cocoa,Cocoa Touch,Uiviewcontroller,这种方式有效: type1ViewController *viewController = [[type1ViewController alloc] initWithNibName:@"Type1View" bundle:nil]; viewController.parentViewController = self; self.type1ViewController = viewController; [self.view insertSubview:viewController.view a

这种方式有效:

type1ViewController *viewController = [[type1ViewController alloc] initWithNibName:@"Type1View" bundle:nil];
viewController.parentViewController = self;
self.type1ViewController = viewController;
[self.view insertSubview:viewController.view atIndex:0];
[viewController release];
但这种方式给了我一个错误,“请求非结构或联合中的成员parentViewController”:

我不明白为什么会有不同。编译器认为它不喜欢什么?
当您调用
self.type1ViewController.parentViewController
而不是
viewController.parentViewController
时,它会给您一个错误,因为您将
self.type1ViewController
声明为某个超类,而不是type1ViewController。当编译器查看此声明时,它不会找到parentViewController属性,因此它会给出错误


在第一个示例中,viewController仍然声明为type1ViewController,因此工作正常。在第二个示例中,如果将其强制转换为type1ViewController,它实际上仍然可以工作,但当然最好只是更改声明。

当您调用
self.type1ViewController.parentViewController
而不是
viewController.parentViewController
时,它给了您一个错误,因为您将
self.type1ViewController
声明为某个超类,而不是type1ViewController。当编译器查看此声明时,它不会找到parentViewController属性,因此它会给出错误


在第一个示例中,viewController仍然声明为type1ViewController,因此工作正常。在第二个示例中,如果将其强制转换为type1ViewController,它实际上仍然有效,但当然最好只是更改声明。

如果ParentViewController的type1ViewController属性是用type1ViewController类声明的,那么第一行应该是:

Type1ViewController *viewController = [[type1ViewController alloc] initWithNibName:@"Type1View" bundle:nil];
不是:


注意大写字母。事实上,我有点惊讶这个编译时没有错误或警告。

如果ParentViewController的type1ViewController属性是用type1ViewController类声明的,那么第一行应该是:

Type1ViewController *viewController = [[type1ViewController alloc] initWithNibName:@"Type1View" bundle:nil];
不是:


注意大写字母。事实上,我有点惊讶这个编译时没有出现错误或警告。

我还会检查NIB文件中的Type1ViewController。我遇到过这样的问题,即在nib上的引用出口中会抛出此错误。我们正在查找我创建的自定义视图控制器以外的内容。

我还将检查nib文件中的Type1ViewController。我遇到过这样的问题,即在nib上的引用插座中会抛出此错误。我们正在寻找的不是我创建的自定义视图控制器。

虽然这并不明显,但我希望人们能找到答案,但我应该明确这段代码在“ParentViewController”中类,该类包含类type1ViewController的type1ViewController属性。Type1ViewController是使用类型为parentViewController的属性parentViewController声明的。所以在这种情况下,我不确定我是否完全理解你的答案。只是双“.”语法困扰编译器吗?在ParentViewController的头文件中,self.type1ViewController声明为type1ViewController。怎样才能使它这样工作呢?虽然这并不明显,但我希望人们能够理解,但我应该明确指出,此代码位于“ParentViewController”类中,该类包含type1ViewController类的type1ViewController属性。Type1ViewController是使用类型为parentViewController的属性parentViewController声明的。所以在这种情况下,我不确定我是否完全理解你的答案。只是双“.”语法困扰编译器吗?在ParentViewController的头文件中,self.type1ViewController声明为type1ViewController。怎样才能使它这样工作呢?
type1ViewController *viewController = [[type1ViewController alloc] initWithNibName:@"Type1View" bundle:nil];