0

解释

我的应用程序基本上使用了一个地图视图,上面覆盖了代表建筑物的多边形,再加上一个注释。因此,为此它导入了一个名为 Annotation 的自定义类,该类在点击注释时处理弹出详细信息,这意味着它存储了建筑物的名称和地址。此时标注(蓝色显示按钮)加载了一个空的 DetailViewController 对象(因为实际上没有任何数据要通过)。

我很快以可搜索表的形式添加了一个新功能,它加载了 Building 类的自定义对象(具有与 Annotation 类似的属性,以及图像和更多细节),然后加载到前面提到的 DetailViewController 类以及建筑物的详细信息中。

总而言之,MapVC 包含多个注释,当点击相关的公开按钮时会打开 DetailVC。SearchVC 可以通过 MapVC 上的按钮访问,并且有一个 Building 对象表,该表会加载一个带有相关数据的 DetailVC,如下所示:

应用程序功能的基本图

下一步

所以现在我想在标注上的蓝色披露按钮中实现功能,所以当用户点击它时,它会加载建筑细节。目前它只有注释的详细信息。我可以将额外的属性添加到注释中以使其完整,但我认为只使用一个名为 Building 的自定义类会更好,它具有 MKAnnotation 特性。然后为注解和 searchVC 的表加载这个 Building 类。

问题

那么最后,解决这个问题的最佳方法是什么?我希望所有数据都独立于图中的任何 VC 进行存储。我遵循了 Apple 的教程(BirdSighting 教程),它使用了一个单独的 Datacontroller 类,然后我将其加载到其他类中。这是最好的方法吗?

4

1 回答 1

1

你说的是 MVC,模型-视图-控制器。这是一种非常聪明的处理方式,也是一种很好的实践。模型存储数据,在这种情况下是建筑物名称等。视图显示数据。控制器将视图连接到模型,更新视图,从用户那里获取通知,进而更新模型。

我对模型数据使用单例模式。应用程序中只有一个单例实例。这样,数据就不会绑定到任何一个特定的视图控制器。数据只在一个地方更新,模型。使用应用程序数据对象的单一收敛点解决问题要容易得多。

我有一个在我的 PCH 文件中定义的宏。

#import "DataController.h"

#define DATA() [DataController sharedInstance]

在我的代码中,我可以通过调用轻松进入我的模型类

DataController *data = DATA();

我所有的视图和视图控制器都访问存储在 DataController 中的对象,因此从来没有两个视图控制器独立处理单独的信息。所有引用都指向同一个地方。

有些人使用 AppDelegate 对象来存储数据,但它可以很快变成一个 1000 行的野兽。我更喜欢保持 AppDelegate 干净:-)

于 2012-09-07T21:02:21.653 回答