2

我正在构建一个主从应用程序,其中详细视图可能包含近 100 个字段。模型对象使用外部库来访问文件中的元数据,不需要 100 个属性;从文件中检索数据并用结构表示。这些字段由枚举标识,并使用 Find(Enum) 方法或使用由 lib 提供的迭代器访问,该迭代器迭代元数据中存在的所有字段。

我想利用库中的枚举/查找/迭代器,而不必使用带有 getter/setter 的 100 个属性和 UI 中文本字段和其他控件的 100 个出口。

类似于我在使用这个库的程序中看到的一种方法,我希望有一个 getter 和一个 setter,以及一个基于元数据的枚举 FieldId 的 switch()。在 getter 和 setter 中,我想以编程方式访问 UI 中的相应文本字段或其他控件,以根据需要获取或设置值。

当用户在主视图中选择一个文件时,getter 将遍历所有详细字段并显示相关元数据字段的值。当用户保存文件时,我需要遍历更改的字段并使用适当的 FieldId 枚举调用设置器。

我是 Cocoa/Obj-C 的新手,我能想到的只是绑定——但我可以将字段绑定到方法吗?我可以使用绑定将适当的元数据 FieldId 传递给 getter/setter 吗?

在这种情况下,拥有 100 个网点真的合适吗?我是否应该考虑另一种程序架构,其中字段/出口在逻辑上分组并划分为多个类?

4

3 回答 3

2

如果您想遍历相同类型的多个视图(或者,具有相同的基本类型,例如UIControl),您可以使用 an并在它提供IBOutletCollection的单个视图上进行迭代。NSArray或者,如果您从代码中调用 100 个字段(这实际上更有意义),您为什么不自己将视图推送到NSMutableArrayorNSMutableDictionary并通过它们访问它们?更好的是,如果字段应该出现在同一个容器视图中,那么要求它的子视图myContainerView.subviews获取一个数组就足够了。

于 2012-05-02T17:25:15.597 回答
2

考虑制作一个矩阵。它是一种单独的控件,提供单一类型单元格的二维矩阵。文本字段单元格可能是最常见的。

要在 nib 编辑器中创建矩阵,请从单个文本字段开始。然后,按住选项并调整其大小。Xcode 会将其转换为文本字段单元格的矩阵;您通过拖动确定每个维度中有多少。

一旦你有一个矩阵并连接了一个出口,你可以通过 x 和 y 索引向它询问单元格,然后你可以像处理独立字段一样对这些单元格进行操作。

于 2012-05-03T02:35:29.847 回答
0

如我随后的一个问题所述,如何绑定到 Cocoa 中 NSDictionary 子词典的值?,我最终将元数据预加载到一组嵌套数据结构中。

然后我在每个字段中使用绑定来访问/显示适当的元数据。如果元数据被修改(例如,通过在文本字段中编辑其值),我将有一个方法来使用外部库的 API 处理修改后的数据结构。

最初让我问这个问题的原因是我想我想直接使用外部API的内部数据结构或方法来获取或设置每个文件内的数据。我从错误的角度看待事物 - 以编程方式访问我的 GUI 中的字段,而不是让 GUI 绑定到我的应用程序中的数据。我应该知道的更好:)

感谢您的建议。

于 2012-12-09T00:45:20.847 回答