XCode IBOutlet UIView 添加到 ViewControllers .h - UIViews 类型无法识别

Posted

技术标签:

【中文标题】XCode IBOutlet UIView 添加到 ViewControllers .h - UIViews 类型无法识别【英文标题】:XCode IBOutlet UIView added to ViewControllers .h -- UIViews type not recognized 【发布时间】:2011-12-30 13:33:14 【问题描述】:

我已将我的视图控制器的视图作为属性添加到支持 .h 文件 myViewController.h 的视图控制器中:

@property (weak, nonatomic) IBOutlet UIView* view;

在 myViewController.m 方法之一中编写 view.window 时,Xcode 将该行标记为错误,并显示“在 view 类型的对象上找不到属性 'window'”。它无法构建。注意我最初选择支持类 view.h 作为类型的视图。我已经清理了项目。

特别是我在这里得到错误:

- (void)viewDidLoad

    [super viewDidLoad];
displayLink = [view.window.screen displayLinkWithTarget:(self) selector:@selector(drawFrame)];

我该如何解决这个问题?我喜欢在其中一种视图控制器方法中访问视图控制器视图窗口。

【问题讨论】:

不要添加名为“view”的插座,因为它会与所有名为viewUIViewControllers 上的标准插座冲突。尝试使用其他名称。 谢谢。你是对的。我实际上使用了不同的名称。为了清楚起见,我删除了我选择的前缀。 我解决了。我用与视图支持类相同的名称命名了出口。这导致了错误。命名与类不同的出口可以解决它。谢谢你的提示! 【参考方案1】:

@synthesize 语句是什么?

不要将插座命名为“视图”,这会导致与具有视图属性的 UIViewController 混淆。

目前 Apple 默认让 ios IBOutlets 变弱。自早期的 iO​​S SDK 以来,这种情况发生了变化。如果它们被超级视图或控制器保留,那么弱的 IBOutlet 通常会起作用。

【讨论】:

@synthesize 语句位于视图控制器 .m 中。 UIView.h 由 view.h 导入,view.h 由视图控制器 .h 导入。默认情况下,插座很弱。弱者为其他项目工作。我与其他项目(虽然没有访问视图本身)进行比较,但找不到差异。 在 iOS 上 IBOutlets 很强,在 OSX 上它们很弱。 明白了。试过了。没有解决它。 Apple 的“您的第一个 iOS 应用程序”指南使用 ARC 和弱属性。感谢您的提示! @LarsHansen 这很有趣!也许 Apple 正在改变他们留住人才的理念。 你和@JasonCoco 基本上给出了正确的提示:命名冲突。虽然直到现在我才从你的回答中理解它(我读的是“出口视图”而不是“出口'视图'”)并且“解决”是对我原来帖子的评论,但我选择了这个答案作为首选,因为我不能为原始答案这样做。然而,这个问题有一个解决方案,因此一些标记是合适的。谢谢。

以上是关于XCode IBOutlet UIView 添加到 ViewControllers .h - UIViews 类型无法识别的主要内容,如果未能解决你的问题,请参考以下文章

无法更改 IBOutlet 属性的框架

未设置自定义 UIView iboutlet

如何在 Xcode 5 中让两个按钮转到同一个 IBOutlet?

在自定义 UIView 类中从 UIView 快速创建 IBoutlet [重复]

@IBOutlet和@IBAction指的是错误的项目,如何摆脱那些引用?

将 xib 中的子视图添加到自定义 UIView