有时,您想在iPhone上本地存储数据,而这样做则需要在本地设备上建立数据库。这次,我们将使用SQLite创建一个应用程序,以记录您白天的快乐时光。我们希望将其用作日志,这是一种随时记录您的日常快乐时刻的快速方法。从技术上讲,我们将每条快乐时光记录定义为一条日志行。
一些要求:日志行不可编辑,我们希望将其显示在列表中,并在新窗口中对其进行详细访问。我们希望能够删除它们。
在开始之前,请下载Creo如果还没有的话。
好的,让我们开始从Creo界面创建一个新的新项目。
我们不需要此应用程序的导航栏,因此让我们将Creo创建的默认窗口移到NavigationBar1元素外部,然后删除NavigationBar1并保留Window1容器。
如何使用Creo创建本地SQLite数据库
让我们转到“控件列表”面板并搜索SQLite。现在将其放在Project Globals面板上,然后在屏幕上弹出SQLite Database Configurator。我们要创建一个新资产(而不是内存数据库),因此我们从下拉菜单中选择此选项,然后根据应用程序对该新资产进行命名。
现在让我们添加一个名为的表Posts并定义其属性:
- id属性的主键,自动增量,和独特
- 一个body属性
- 和一个date属性
保存数据库时,会将一个新对象添加到Globals —中SQLiteDatabase1。我们使用该对象在应用程序中与Happiness Journal数据库进行全局交互。
如果选择SQLiteDatabase1对象,则可以定义是否要将其用作只读数据源。在我们的情况下,我们需要对它进行读写,因此我们决定将其放置在应用程序的Documents空间中。
如何通过表视图管理数据列表
让我们回到Window1容器,该容器应包括3个区域:标头,插入新日志行的方式以及已添加的日志行的列表。
创建一个自定义标题
这很容易,而且我们之前已经做到了。我们需要一个视图和一个标签。我们将视图背景设置为蓝色#48ADC6FF-,锁定其顶部,右侧和左侧约束,并使其在水平和垂直方向上自动调整大小。然后,我们将标签居中,将其字体更改为更好的字体(Bradley Hand呢?),将其稍微扩大一点,修复其左,右,底部约束,然后让它水平自动调整大小。结果,我们得到了:
定义添加日志行的方法
我们的应用程序必须易于使用,这就是为什么我们要直接从位于应用程序主页上的输入控件中添加新的日志行。
这个新屏幕是屏幕的第二个逻辑区域,因此我们定义了一个新视图,以将Label封装为标题,将TextField封装为添加日志行,并以LineShape控件作为分隔符。TextField控件是单行输入控件:
通过数据库查询在表视图中显示日志行
主窗口的第三个区域是“表格视图”。在其中,我们希望显示到目前为止添加的所有幸福日志行,在这种情况下,由于没有一个UI控件,因此不显示“视图”。
现在Window1,TableView1在其上放一个Table View ,然后进入Layout面板。我们想要将此表视图绑定到可以显示所有日志行的数据库查询,然后执行SQLiteDatabase1前面定义的操作,并添加一个Query- Query1:
使用Creo将查询添加到SQLite数据库非常简单。
我们从“对象”检查器中打开“查询编辑器”,然后将“帖子”表拖放到查询区域。因为我们想以相反的顺序获取日志行,所以我们将其添加ORDER BY date DESC到原始查询中,并得到以下查询:
现在,我们运行查询以检查一切正常,在这种情况下,我们得到一个空列表。让我们保存它,然后将焦点TableView1再次移至该位置。查看对象检查器,我们现在看到SQLiteDatabase1.Query1在数据集属性列表中。 我们选择此数据集,然后更改一些属性值:
- 像元高度为55像素
- 将Text属性映射到body,Detail Text映射到date并清除Image属性的单元格属性。
- 让Identifier属性为id。
如何将日志行记录添加到数据库
当我们向TextField1控件中写入内容并按iPhone键盘上的Enter键时,我们希望将此文本(日志行)保存在Posts表中。
在这种情况下,Text Field控件允许我们拦截控件的DidTapReturn事件TextField1,这对于我们的情况而言是完美的:
我们将变量定义为DatabaseRecord,然后将Posts表属性之一绑定body到该TextField1值。然后,我们将此记录添加到Posts表中,清理TextField1内容,然后重新加载Table View。
我们可以在Creo仿真器中运行该应用程序,以检查是否一切都按预期方式运行,并且可以正常运行-我添加了两条日志行来测试该应用程序:
如何在单独的窗口中显示日志行详细信息
现在我们可以向数据库中添加日志行了,我们希望点击日志行并在新窗口中显示它-因为日志行可以长于TableView控件显示的20-25个字符。
那很容易。我们添加一个Window2容器,然后放一个Button(将用户导航回到主窗口),Label(标签)以显示日志行date,以及TextView(文本视图)以显示日志行body。我更改了一些属性使其更漂亮:
为了告诉Window2您显示特定的日志行,我们需要将日志行传递id到窗口。我们需要的是其中的自定义属性Window2,我们将其称为id。
为了Window2在用户每次点击日志行时显示,我们需要管理控件的DidSelectCell事件TableView1。在那里,我们可以将任何参数传递给 Window2:
使用相同的技术,我们也可以轻松地传递body和date属性。相反,我们决定使用id 来从数据库中检索其他记录属性-这样我们就可以练习如何访问数据。
鉴于事件id是,加载日志行详细信息的理想场所。在这种情况下,我们需要创建一个SQL语句:WillShowWindow2
还有一件事。要完成此用例,我们需要Window2在用户按下“后退”按钮时关闭。因此,我们向后退按钮事件添加了Window2.close()通话 Action。
注意:在此期间,我还更改了后退按钮的颜色和字体,使其更加整洁。
现在,我们可以在CreoPlayer或模拟器中运行该应用程序,将一些快乐的时刻添加到我们的列表中,然后逐一进行导航。
如何从数据库中删除记录
要与iPhone上的列表中的记录进行交互,我们习惯于向左或向右滑动记录,并显示默认操作-在我们的情况下为删除。
好吧,使用Creo获得这种行为真的很容易。展开TableView1控件,选择Cell1添加一个Right Action。多么酷啊?
现在Action,在RightAction1元素事件中添加几行代码,我们做到了:
等待!如果我们浏览日志行详细信息,我们可以看到它仍然是可编辑的。
这是因为我们忘记取消财产Allows editing的的TextView1控制,看到在Object Inspector。
现在我们很好。