【问题标题】:How to fix warning Autosynthesized property 'view' will use synthesized instance variable '_view', not existing instance variable 'view' [duplicate]如何修复警告自动合成属性“视图”将使用合成实例变量“_view”,而不是现有实例变量“视图”[重复]
【发布时间】:2014-07-11 23:55:33
【问题描述】:

我在 xcode 中收到以下警告/错误:

Autosynthesized property 'view' will use synthesized instance variable '_view', not existing instance variable 'view'

当我试图在我的 NSViewController 上重新定义/覆盖 view 属性的类时。

@interface DABListViewController : NSViewController
  @property (nonatomic, strong) DABListViewControllerView *view;
@end

另外,视图似乎没有出现。这个question 看起来很相似,但不起作用。

【问题讨论】:

  • NSViewController 已经有一个名为 view 的属性。您不能通过声明另一个具有相同名称的属性来覆盖该属性。你可以做的是 1) 创建一个 DABListViewController 的实例 2) alloc/init a DABListViewControllerView 作为局部变量 3) 调用视图控制器的 setView: 方法来改变视图。要么这样,要么只使用 Interface Builder 中的身份检查器来更改视图的类。
  • 我明白了,谢谢。这个评论可以作为答案吗?我不觉得我的问题与它标记为重复的任何一个问题重复。这条评论回答了我的问题,但据我所知与answer I found here 冲突。
  • 问题关闭后,无法添加答案。这就是我发布评论的原因。 FWIW,我同意您的问题与他们选择的问题不重复。

标签: objective-c cocoa uiviewcontroller nsviewcontroller


【解决方案1】:

在我的实现文件中包含@dynamic view; 解决了这个问题。

@implementation TSPollListViewController

  @dynamic view;

  - (void)loadView {
    self.view = [[DABListViewControllerView alloc] init];
  }

@end

@dynamic 告诉编译器不要担心属性,因为它们会在运行时得到处理。我猜是告诉编译器忽略我们不会覆盖NSViewController 中定义的view 实例变量的属性。我认为这也意味着没有_view。这应该适用于 UIViewController 以及您要在子类中重新定义 Type 的大多数属性。

【讨论】:

  • @dynamic 不是正确的解决方案...请参阅:stackoverflow.com/questions/19505995/…
  • 再次强调; 不要这样做! 完全错误的“修复”;根本没有修复。
  • 嗯,对不起@bbum。所以这个answer 也是错误和误导的,还是那里有不同的情况?我以为我基本上是在做那里描述的事情,但是当我省略 @dynamic 时,我收到了警告。
  • Travis Jeffery in his blog 已经明确强调了这个解决方案是绝对正确的。谁能解释真相在哪里?
  • @bbum;据我所知@dynamic,它只是阻止了辅助方法的自动生成,所以子类将使用超类的 setView: 和视图方法,所以一切都应该没问题吗?
猜你喜欢
  • 1970-01-01
  • 2011-05-29
  • 2013-03-01
  • 2013-11-01
  • 2011-10-26
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多