iphone可可“错误:请求成员____在某个结构或联合的东西”

时间:2009-05-23 23:29:47

标签: 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 atIndex:0];
[viewController release];

但是这种方式给了我错误,“成员parentViewController请求不是结构或联合”:

type1ViewController *viewController = [[type1ViewController alloc] initWithNibName:@"Type1View" bundle:nil];
self.type1ViewController = viewController;
self.type1ViewController.parentViewController = self;
[self.view insertSubview:viewController.view atIndex:0];
[viewController release];

我不明白为什么它应该有所不同。编译器看到它不喜欢什么? 感谢您的帮助

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

如果使用Type1ViewController类声明ParentViewController的type1ViewController属性,则第一行应为:

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

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

注意大小写。我实际上有点惊讶,编译没有错误或警告。

答案 2 :(得分:0)

我还会检查你的Type1ViewController的NIB文件。我遇到的问题是,在nib上的引用Outlets中引发此错误的问题是寻找除了我创建的自定义View Controller之外的其他东西。