问题标签 [iboutlet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
526 浏览

objective-c - 是否需要在 dealloc 中将 outlets 变量设置为 nil(即使在 IOS 3.0 之后)?

在苹果的 <内存管理> 文档中谈到 Outlets 时。

它说

在您的自定义视图控制器类中,您可以实现 viewDidUnload 以调用您的访问器方法将出口设置为零。

我可以理解这一点,因为在这种情况下调用访问器方法来设置 nil 将释放对象并将指针设置为 nil 可以防止访问可能导致崩溃的无效点。

但在那之后,它说:

注意:在 3.0 之前的 iOS 上,viewDidUnload 方法不可用。相反,您应该在 setView: 中将 outlets 设置为 nil,如下例所示:

另外,由于UIViewController中dealloc实现的一个细节,dealloc中还需要设置outlet变量为nil:

1)为什么即使在dealloc中我们也需要设置nil?(我认为 dealloc 是对象生命周期的最后一步,没有其他人可以通过这个对象访问出口。)

2)iOS 3.0 或更高版本还需要设置 nil 吗?(我发现 Xcode 自动生成的代码不会将 nil 设置为出口变量,只释放它们。)

0 投票
3 回答
3066 浏览

xcode - IBOutlets 未显示

我在 .h 中创建了三个IBOutlets,但是当我转到 Interface Builder 并转到引用插座或右键单击要连接到其中一个插座的对象时。它只是没有显示我制作的插座。如何找到 IB 中的图像并将其连接到这些图像。我的目标是制作自定义按钮,我在 IB 中有图像并设置了突出显示的状态。我希望图像在触发 touchupInside 时自动切换到突出显示状态。

0 投票
1 回答
1995 浏览

objective-c - Objective-C/Cocoa 中的绑定与 IBOutlets

我正在通过一个简单的 Objective-C/Cocoa 程序来尝试学习该语言,并且对我编写的代码如何将某些内容链接到界面构建器感到有些困惑。

例如,我有一个简单的 NSString:

在我的界面构建器中,我有一个文本字段,我使用文本字段的绑定将其连接到字母。

然而,这个例子也有这个:

在视图中,我有一个不断变化并显示不同单词的表,这些单词存储在 NSMutableArray 中。我想我可以理解我只是无法将数组绑定到表,因为还有一些更复杂的情况。因此,在 Interface Builder 中,我创建了一个 Array Controller 并将其绑定到表。在 Array Controller 的绑定中,我将 Array Controller 绑定到单词数组。

我知道我要做的最后一件事是将数组控制器也绑定到我的 NSArrayController 对象。我不明白为什么我通过主控制器对象通过在此插座和 wordsController 之间建立连接来执行此操作。在 Array Controller 的绑定部分有一个灰色的选项 Content Object,上面写着“NSArrayController 将其视为其内容的 NSArrayController”。为什么我不在这里设置绑定?它作为一个出口有什么意义,为什么它与我的 NSString 字母不同?

谢谢

0 投票
1 回答
152 浏览

objective-c - 内存和接口生成器对象

我对使用 IB 对象的内存管理有点困惑,这就是我所做的:

  • 我有一个导航控制器,我用

    ...[[[viewController alloc]init]autorelease]...

  • 我将 Interface Builder 的每个元素连接到这样定义的 IBOutlet:

    @property(nonatomic, 保留) IBOutlet *object

    在 .m 文件中: @synthesize object = _object

  • 然后在 viewDidUnload: self.object = nil;

  • 最后在dealloc方法中: [_object release];

这是管理 Interface Builder 对象内存的正确方法吗?

0 投票
1 回答
416 浏览

cocoa - 对子类 NSWindowController 的引用返回其文档 - 这是正确的吗?

我是基于文档的应用程序的新手,因此我可能错过了一些基本的东西。我编写了一个基于文档的应用程序,它使用子类 NSWindowController 作为接口,使用子类 NSDocument 作为模型。根据文档,我在 makeWindowControllers 中初始化了 windowController 并加载了它的 xib。在界面生成器中,xib 将我的 windowController 子类设置为文件的所有者。在窗口中的视图中,我有一个 NSOutlineView 的子类,并且 NSOutlineView 数据源和委托也在 nib 中引用并通过 IBOutlets 连接到 windowController。

根据文档,我应该能够通过 [windowController 文档] 从 OutlineView 数据源访问文档。但是,从 OutlineView 数据源引用 windowController(通过 IBOutlet)给了我文档!

这导致 OutlineView 数据源(它是 windowController 的 xib 中 NSObject 的子类)中的一些相当丑陋的代码来获取文档,例如:

头文件中的 IBOutlet 将 myWindowController 引用为:

简而言之 - 为什么在这种情况下连接到 windowController 的 IBOutlet 会直接让我获取文档?上面的代码有效,但似乎不应该。

编辑:澄清

0 投票
2 回答
170 浏览

objective-c - 除了标签还有其他方法来区分控制吗?IBOutlet 怎么样?

如果我们使用 IBAction,我们得到了 sender 对象,对吗?如果我们还有一个指向该按钮的 IBOutlet,该出口是否会指向与发件人相同的地址?

那么我们如何测试相等性呢?有人这样做吗?

0 投票
1 回答
177 浏览

cocoa-touch - presentModalViewControllerAnimated:给出白屏

大家好。最近困扰我的事情是我组装的这个自定义电影播放器​​。它主要基于一个工作的,NGMoviePlayer.

问题是这样的:我有.xib一个 UIKit 友好的资源包。当我打电话时:

..在我的自定义类上,然后访问view(因此调用loadView)它不会引发任何错误,但它实际上也不会正确加载插座。我看到一个白屏,调试显示所有视觉元素都是0x0,但没有出现预期的错误。

编辑:我现在也尝试在我的目标应用程序的资源包之外加载 .xib,并且发生了同样的事情(白屏)。

我正在寻找的特别是:

  • Could not load NIB <nibname>...如果根本没有找到,或者
  • ...loaded the <nibname> NIB but the view outlet was not set如果找到但未正确连接

xib 在本地应用程序中(我知道静态库不能包含 xib)。NGMoviePlayerDemo我已经尝试在 的作者提供的项目中使用相同的资源包,NGMoviePlayer但它确实会引发错误:

我已导航到它为捆绑包显示的路径,并且该位置存在一个MyMoviePlayerViewController.xib文件。

我也尝试过使用bundle:nil,以防 Xcode 出于某种原因将捆绑目录的资源与主要目录的资源结合在一起。这两种情况都不会引发错误并在我的实际项目中显示白屏。这两种情况都会在项目中引发Could not load NIB错误。NGMoviePlayerDemo

编辑:我已经尝试过与应用程序中的资源包分开的相同 .xibNGMoviePlayerDemo并且它工作正常。

非常感谢所有输入。

0 投票
2 回答
394 浏览

ios - iOS 的 Interface Builder 中没有 IBOutlets

我已经在头文件中声明了 IBOutlets,但是当我打开 XIB 文件并单击视图时(我的类是采用 TableViewDelegate 的 UIViewController 子类),我只看到引用的插座,没有看到 IBOutlet。请指教。

0 投票
0 回答
1657 浏览

cocoa-touch - 将标签链接到 IBOutlet 会产生 NSUnknownKeyException

我创建了一个 TabBarView。在其中一个选项卡上,我有一个视图,Labels上面有几个。它工作正常。

当我将 Interface Builder 中的标签连接到文件的所有者(相应的 IBOutlets)时,当我打开该选项卡时,应用程序崩溃并出现以下错误:

我已经读到它可能与不匹配(正确连接)到其视图控制器的 xib 有关。我不知道如何检查或解决这个问题?

这是我的头文件的样子:

如果有人有任何提示或其他类似帖子的链接,我将不胜感激!

先感谢您!

0 投票
1 回答
630 浏览

objective-c - 只读插座?

假设我有一堂课。我想通过以下方式声明一个属性:

  1. 从类外部,如果以编程方式访问,它应该是只读的;
  2. 应该可以使用插座从 Interface Builder设置值;
  3. (从课堂内部它应该是可写的,但我知道该怎么做)。

我想出的“解决方案”是写一个一次性设置器:

但是这个 setter 仍然可以从代码中调用(虽然只有一次有效),所以它不是一个很好的解决方案。

另一种方法是将 ivar 标记为 IBOutlet 并使属性readonly如下所示:

但是根据这个答案,这是一种糟糕的风格,并且使内存管理不清楚。

有任何想法吗?