gpt4 book ai didi

objective-c - 在界面构建器和模块化中使用 'external object'

转载 作者:行者123 更新时间:2023-12-01 17:01:22 24 4
gpt4 key购买 nike

这是一个关于最佳实践的问题。

我有一个使用标准 iOS 选项卡 Controller 的应用程序。

我想做的一件事是将 XIB 拆分为单独的文件。我可以通过在每个选项卡 Controller 的“NIB 名称”部分中指定“子”XIB 来实现这一点。到现在为止还挺好。

在这个应用程序中,我有一个几乎所有 UIViewControllers 都使用的对象(例如:提供 Web 服务调用)。我们称之为 MyServices。

在单个 XIB 解决方案中,我可以将一个对象拖到对象列表中,将类型设置为“我的服务”。我可以在每个 ViewController 中声明一个 MyServices* 类型的 IBOutlet,并将两者连接在一起。这很好用。

但是,如果我将 View 移到单独的 XIB 中,则任何需要访问 MyServices 对象的堆栈下方的 Controller 都不走运,因为该对象不再存在于该 XIB 中以执行连接。

我期望能够做的是声明一个“外部对象”,并改为连接到它。但我看不到我如何将“父”XIB 中的 MyServices 对象“传递”为子 XIB 中的“外部”对象。

这只是在 IB 中不支持吗?什么是最好的选择?

我无法在 Controller 中指定 XIB 名称,并且可能在运行时以编程方式创建它(可能使用某种 loadFromNib 代码声明字典以提供外部对象)。这确实意味着执行此操作的 Controller 必须知道 MyServices,即使它不直接使用它。

或者,我可以在每个 UIViewController 中都有一个“dataProvider”,因此不是直接将 MyServices 设置为 IBOutlet,它可以做 [dataProvider getServices]。同样,必须连接到可以做到这一点的东西——这限制了 XIB 可以被分解的地方。而且感觉有点不必要的冗长..

这里的最佳做法是什么?

最佳答案

看起来使用外部对象,您将对象实例化回到自己手中,并且您还必须手动实例化 NIB。至少这是我从 How to use a common target object to handle actions/outlets of multiple views? 的答案中收集到的。

Can I use Interface Builder to inject dependencies across multiple nibs?问了与您的问题非常相似的问题,也没有真正的解决方案。

How do I set up a proxy object in the main application NIB?作者也放弃了使用Interface Builder作为依赖注入(inject)工具的想法。

所以我猜想我们这些 java 移民正用头撞这里看不见的墙壁。我们用来塑造我们头脑中的代码的隐喻(以及我们重视并与质量相关的代码质量)并不适用于Objective-C。那可能是因为我们不熟悉 Obj-C 习语。或者,我们正在处理语言和社区发展的不同进化阶段(例如,参见 Obj-C 中 TDD 实践的惊人不成熟)。我个人看的不多最佳实践 在 Obj-C 世界中描述的 9 个月里,我正在认真处理它。

关于objective-c - 在界面构建器和模块化中使用 'external object',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6599015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com