故事板中的外部对象

kpr*_*fic 5 objective-c storyboard xib nsbundle ios

Apple已经为我们提供了故事板,我从一开始就追随它的'进化,它有一些优点和缺点,但如果你将它与oldschool"xib"文件进行比较,这肯定是一个"未来". ..

我在这里意识到的是一种叫做"外部对象"的东西.当使用标准的"xibs"时,我们总是可以从IB对象库(右侧窗格)中拖放两种特殊类型的对象

"文件所有者"是此"外部对象"的示例.

我们能够将一个或多个ExternalObject拖放到我们的xib文件中,并通过使用此UINib API实例化此类ViewController将其连接到某个外部对象:

- (NSArray *)instantiateWithOwner:(id)ownerOrNil options:(NSDictionary *)optionsOrNil;
Run Code Online (Sandbox Code Playgroud)

......是的,有可能,文件:

如果nib文件包含除File文件所有者代理对象之外的任何代理对象,则可以使用options字典为这些代理指定运行时替换对象.在该字典中,添加UINibExternalObjects键并将其值设置为包含任何代理对象(键)的名称以及要在其位置使用的真实对象的字典.代理对象的名称是您在Interface Builder检查器窗口的"名称"字段中为其分配的字符串.

现在谈到故事板 - 对象检查器中没有外部对象.这是有道理的,因为我没有找到任何允许我们将外部对象注入从故事板创建的视图控制器中的API.我们只有这个:

- (id)instantiateInitialViewController;

- (id)instantiateViewControllerWithIdentifier:(NSString *)identifier;
Run Code Online (Sandbox Code Playgroud)

所以没有办法通过我们的"选项".

然而...

在创建一个Swift项目之前,在Storyboard中没有外部对象(可能还有另一个因素可以在我的故事板中启用外部对象,我不确定).

因此,可以设置故事板允许我们将外部对象拖放到故事板中的设置.但是我们怎么能利用这个呢?如何从故事板加载视图控制器并挂钩这些代理对象?

Vik*_*ica 2

您可以将 NSObject 拖放到视图控制器场景上,并在检查器中为其指定正确的类。

在此输入图像描述

它可以按预期接线

在此输入图像描述

为此问题/答案创建了一个示例项目并将其发布在 GitHub 上

  • 很抱歉,但这不是我问题的答案,我知道我可以使用“NSObject”作为故事板 - 它在 IB 检查器中称为“对象”。我问的是 IB 检查器中名为“外部对象”的东西。最好的! (2认同)
  • 是的,确实如此,它可以是任何对象,但该对象将在 xib 取消归档期间创建。另一方面,外部对象不是在此过程中创建的,它是指向已存在的其他某个对象的链接。 (2认同)