短题

在 XCode 的界面构建器的对象库中有一个叫做 Object 的东西。我想知道使用这个“对象”可以完成什么样的任务。

具体来说,它是 Storyboard(或 xib)中的 NSObject。它的描述如下:



长问题

我正在尝试构建一个 UITableViewController 和一个 UISearchController 。由于他们都需要在他们的委托(delegate)中实现 UITableViewDelegateUITableViewDatasource,我希望我可以将 UISearchController 的委托(delegate)分配给一个对象,而不是 Main UITableViewController
我正在寻找一种在 Storyboard 中实现此目的的方法,而不是在 viewDidLoad 中手动分配委托(delegate)。特别是,通过弄清楚 Object 在 Storyboard 中的工作方式。

我知道我可以通过检查 UITableView 的 parent 来区分它们。但是将逻辑分成不同的对象总是好的。它将更容易实现、更好的效率、更好的结构和可能被重用。

提前致谢。

我试过的

  • Object 与 Storyboard 中的 UITableViewController 放在同一级别(您不能将 Object 放入另一个 0x231384)。
    将其与 UIViewController 中的 @property (nonatomic, weak) IBOutlet NSObject * 链接。
    当我在 UITableViewController 中打印时, NSObject * 结果是一个 nil 指针。没运气。
  • 通过将属性更改为 viewDidLoad ,它变成了 @property (nonatomic, strong) 而不是 UICustomObject 。看来我在正确的轨道上。
  • 最佳答案

    正如您所注意到的,Object 使它成为任何类的对象,包括您自己的自定义类,在加载 XIB/Storyboard 时实例化。您获得 UICustomObject 的事实表明 XIB/Storyboard 加载机制要么不知道该对象应该是什么类,要么找不到您指定的类(通过运行时查找)。

    解决方案是确保在自定义类检查器中为 Object 指定正确的类:

    objective-c - Storyboard 对象库中的  "Object"可以做什么?-LMLPHP

    当然,您还需要确保相关类的实现文件在您的项目中并且包含在您的目标中。

    最后,将 strong 用于指向自定义对象的 IBOutlet 是正确的,因为它是顶级对象,顶级对象应该使用 strong 属性进行引用。 (如果你真的很好奇,Mike Ash 有一个很好的 article 关于 XIB/Storyboard socket 内存管理的细节,包括 OS X 和 iOS 在这方面的差异。)

    关于objective-c - Storyboard 对象库中的 "Object"可以做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11597118/

    10-14 20:34
    查看更多