1

我的目标是以两种不同的方式显示经销商位置:地图和表格视图。

我有一个容器视图控制器 (DealersViewController),它包含两个子视图控制器:DealersMapViewController 和 DealersListViewController。用户可以通过放置在导航栏上的 UISegmentedControl 在 VC 之间切换。点击地图注释或表格视图单元将推送 DealersDetailViewController。

切换已经实现(在 Segmented Control 发生变化时使用来自改变视图控制器的代码)并且似乎工作正常,细节的推送也是如此。

我想改进的是容器和孩子之间的数据流。经销商位置从 Internet 下载 (JSON) 到父节点中,完成后在地图 VC 和列表 VC 上设置 NSArray *locations 属性。该数组将包含由 AFNetworking 自动创建的字典对象,每个对象都有位置数据(每个位置字典都有一个标题、副标题、纬度、经度以符合 MKAnnotation 协议,还有其他内容,如图像和描述等)。

我的问题是:我如何确定容器 VC 和两个子 VC “同意”位置数据的结构?从理论上讲,如果有人想开发另一个子视图控制器以添加到我的容器中,例如在集合视图中显示经销商位置,他怎么能正式知道如何期望数据。苹果说:“如果容器需要子声明方法或属性,它应该定义一个协议来强制执行:”。我可以强制孩子声明位置属性,但数组可以包含任何东西……

也许父母可以成为孩子的数据源?我还没有尝试过这种方法。

我可能把事情复杂化了,但我的目标也是学习如何正确创建可重用的组件,并练习使用自定义协议/委托和设计模式等东西。

谢谢。

4

1 回答 1

0

如果我理解正确,您的问题是结构化数据,以便您的所有控制器都对它有相同的理解。

解决它的最好方法可能是创建一个自定义位置类,并将 JSON 反序列化为该类的实例,然后按照您认为合适的方式传递它。有很多方法可以绕过反序列化,但JSON 模型是如何自动处理它的一个很好的例子。

Tl;dr:将您的 JSON 字典转换为自定义类,然后通过属性或委托将它们传递给您的子视图控制器,无论您觉得哪个更方便。

于 2014-03-07T15:39:31.683 回答