【发布时间】:2010-02-15 20:13:01
【问题描述】:
我正在开发一个显示日程的应用。显示项目列表没有问题。我的问题与在与上一个 tableview 中的选择相关的新 tableview 上显示信息有关。同时不必制作数百个表格视图(信息的大列表)。
简而言之,我如何告诉 iPhone 记住刚刚选择的内容,以便它可以根据刚刚选择的内容显示来自数据库的信息?
有什么想法吗?
【问题讨论】:
标签: iphone database user-interface
我正在开发一个显示日程的应用。显示项目列表没有问题。我的问题与在与上一个 tableview 中的选择相关的新 tableview 上显示信息有关。同时不必制作数百个表格视图(信息的大列表)。
简而言之,我如何告诉 iPhone 记住刚刚选择的内容,以便它可以根据刚刚选择的内容显示来自数据库的信息?
有什么想法吗?
【问题讨论】:
标签: iphone database user-interface
听起来您试图将数据存储在 tableViewController 中。这是一个很大的错误。您的视图控制器应该只存储界面立即操作所需的临时数据。
相反,您需要创建一个包含所有应用数据的数据模型。它可以像自定义类一样简单,其中包含一个数组,也可以像大型核心数据图那样复杂。不管复杂性如何,关键概念是所有数据都写入两次,在数据模型内部进行逻辑处理并从数据模型中读出。应用程序的其他部分没有直接操作数据。通过这种设计,视图控制器不必相互了解。他们只是询问数据模型需要显示哪些信息。
数据模型的一个关键特性是它不知道如何接收数据或如何显示或发送数据。一个构建良好的数据模型将同样适用于 GUI 或命令行或任何其他人机或计算机界面。
在您的情况下,您需要首先忽略数据的显示方式,而是询问您需要在两个不同的表中显示的数据内部的逻辑关系是什么。
例如,假设您的数据是一个简单的名称列表。用户需要创建该列表的一个子集,然后对该子集执行一些操作。您将编写数据模型来存储和返回名称列表。然后你有一个子列表的属性。然后,您将在模型中定义一个方法,将选定的名称从列表传输到子列表。
在您的 UI 中,您将拥有一个表,其控制器会将列表加载到表中并记录用户选择的行。然后控制器将调用将名称移动到子列表中的数据模型方法。控制器唯一知道的是如何请求列表以及如何告诉数据模型选择了哪些名称。它不知道这些数据将用于什么其他用途。
第二个控制器只知道数据模型的子列表属性以及如何告诉数据模型用户选择了子列表中的哪个名称。当它打开它的 tableview 时,它使用子列表中的名称填充表,但知道其他视图做了什么。
如果您有详细视图,则模式会重复。数据模型记录任何接口选择的名称。详细视图控制器只知道如何为所选名称和附加到该名称的任何数据请求数据模型。
这种设计使每个视图控制器都独立于所有其他视图控制器。除了导航之外,视图控制器甚至不需要知道其他控制器的存在。
这种设计使应用程序模块化,易于维护和扩展。您的数据总是在一个地方,并且有一个专门用于保护和操作它的对象。如果数据出现问题,您可以确切地知道去哪里寻找。
【讨论】:
您保存选择,使用您从选择中需要的任何信息进行数据库调用。然后你更新表或任何你必须显示数据库调用结果的视图。
如果您提供有关您的应用程序的结构和用途的更多详细信息,如果您需要更多帮助,我可以充实我的答案。
【讨论】: