【问题标题】:Noob properties error菜鸟属性错误
【发布时间】:2013-02-25 18:25:46
【问题描述】:

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

.h 文件

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

.m 文件:

请建议如何解决此问题。

【问题讨论】:

  • 你为什么注释掉@synthesize ...这一行?取消注释并清除所有目标并再次运行您的项目..
  • @RenoJones 有了现代的 Objective-C 和最新的编译器,你不再需要 @synthesize
  • 啊,是的,你说得对,我相信 xcode 4.2+。

标签: objective-c properties uipopovercontroller


【解决方案1】:

您的类似乎是UIViewController 的子类。 UIViewController 有一个私人的、未记录的 ivar _popoverController。由于您试图在您的类中创建一个具有相同名称的 ivar,因此您遇到了错误。

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      并将 .m 文件中的每个 _popoverController var name 替换为 popoverController

      【讨论】:

      • 不知何故起作用了。我猜默认的 ivar 被合成为 _popovercontroller。谢谢你的回答。
      【解决方案4】:

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

      明智的做法是不要给您的弹出框控制器起一个通用名称,因为例如,如果您决定向工具栏添加多个弹出框,则必须创建多个弹出框控制器才能完成此操作.

      如果您查看 Apple 的示例代码,您会发现他们是如何做到的:

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

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

      【讨论】:

      • 我很想知道为什么在 UIViewController 中声明了 ivar "_popoverController"。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      相关资源
      最近更新 更多