Noob属性错误

时间:2013-02-25 18:25:47

标签: objective-c properties uipopovercontroller

我正在使用现有代码。 这里有一个popovercontroller已在.h文件中声明,它在实现行中给出了错误。

.h文件

@property (nonatomic, strong)   VFImagePickerController     *imagePicker;
@property (nonatomic, strong)   UIPopoverController         *popoverController;
@property (nonatomic, strong)   UINavigationController      *targetVC;

.m文件:
The error

请建议如何解决这个问题。

4 个答案:

答案 0 :(得分:12)

您的班级似乎是UIViewController的子类。 UIViewController有一个_popoverController的私人无证件。由于您尝试使用相同的名称在类中创建ivar,因此会出现错误。

最简单的方法是将popoverController属性重命名为不同的属性。否则,您的应用可能会因使用私有API而被标记。

答案 1 :(得分:9)

发生此问题是因为您的超类UIViewController已经有一个名为_popoverController的实例变量。因此,默认综合和显式(注释)@synthesize指令都无法访问要用于提供popoverController属性的实例变量。

您可以通过重命名属性或显式合成属性以使用其他实例变量名来解决此问题:

// Either
@property (nonatomic, strong) UIPopoverController *localPopoverController
// Or
@synthesize popoverController = _localPopoverController;

(另请注意,“本地”前缀不一定是属性名称或实例变量的最佳实践;请花一点时间考虑您的首选命名约定并适当选择属性/实例变量名称。)

答案 2 :(得分:3)

取消注释合成行并删除下划线,如下所示:@synthetize popoverController;

将.m文件中的每个_popoverController var名称替换为popoverController

答案 3 :(得分:0)

不要将实例变量(或属性)命名为popoverController。如上所述,UIViewController有一个声明为_popoverController的实例变量。 (谁知道为什么。)

最好不要给你的popover控制器一个通用名称,因为,例如,如果你决定向工具栏添加多个popover,你将不得不创建多个popover控制器来完成这个

如果您查看Apple的示例代码,您可以看到他们是如何做到的:

http://developer.apple.com/library/ios/#samplecode/Popovers/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010436

查看DetailViewController中的私有属性部分。在那里,你会看到三个控制器对象,没有通用名称“popoverController”。这将导致问题。