Core Data 教程(2): 如何预载/导入已有的数据

这是系列教程的第二部分,有助于你加快掌握基本的Core Data内容。

系列教程一中,我们为对象建立了可视化数据模型,运行了快速肮脏测试并勾在一个表视图(table view)中来显示。而在这个教程,我们将讨论如何把已有的数据导入或者预先载入到Core Data里面,这样我们的应用开始时会有一些好的默认数据。

在系列教程的最后部分,我们将讨论如何使用NSFetchedResultsController来优化应用,降低内存开销和提升响应时间。

Preloading / Importing Existing Data

预载/导入已有数据

我们要如何在Core Data中预先载入数据呢?流行的解决方案有两种:

  • 启动时从外部源填入Core Data对此,注意到数据库还没有导入,应用可以启动时从外部来源(例如SQLite数据库或是XML文件)读取数据。
  • 在SQLite数据库中预先填充对此我们可以Core Data在模型基础上建立数据库结构,然后使用工具来填入数据库。这类工具可以是基于Core Data API的Mac或者iPhone应用,或是一些直接填入SQLite数据库的程序。一旦数据库填好了,只需将其包含到应用里面作为默认数据库,在不存在已有的数据库情况下。

我们将会采用第二种方式,因为它更简单更有效。为了填充数据库,我们只需稍微扩展一下已有的Python脚本。

注意到为什么用Python脚本而不是用基于Core Data API的工具来来导入数据,是因为我们现在有点走底层的样子,将来可能会容易损坏…但是对于本教程我认为第一,由于我们刚刚接触了SQLite,这样对学习的经验巩固更好,而且对事情的进展看的更加清楚;第二,更简单!

所以,让我们拿出工程中产生的sqlite数据库的拷贝。找出相关文件的最简单的方法就是在程序委托(application delegate)中persistentStoreCoordinator函数里面storeUrl一行下方设置一个断点。你可以通过检测storeUrl变量的内容来获取sqlite数据库备份文件的完整路径。找到它并拷到你的Python脚本目录。

一旦你找到数据库,使用sqlite3来简单看看数据库的模样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
sqlite3 FailedBanksCD.sqlite
 
sqlite3> . schema
CREATE TABLE ZFAILEDBANKDETAILS ( Z_PK INTEGER PRIMARY KEY , Z_ENT INTEGER ,
     Z_OPT INTEGER , ZZIP INTEGER , ZINFO INTEGER , ZUPDATEDDATE TIMESTAMP ,
     ZCLOSEDATE TIMESTAMP );
CREATE TABLE ZFAILEDBANKINFO ( Z_PK INTEGER PRIMARY KEY , Z_ENT INTEGER ,
     Z_OPT INTEGER , ZDETAILS INTEGER , ZNAME VARCHAR , ZSTATE VARCHAR ,
     ZCITY VARCHAR );
CREATE TABLE Z_METADATA (Z_VERSION INTEGER PRIMARY KEY ,
     Z_UUID VARCHAR (255), Z_PLIST BLOB);
CREATE TABLE Z_PRIMARYKEY (Z_ENT INTEGER PRIMARY KEY , Z_NAME VARCHAR ,
     Z_SUPER INTEGER , Z_MAX INTEGER );
CREATE INDEX ZFAILEDBANKDETAILS_ZINFO_INDEX ON ZFAILEDBANKDETAILS (ZINFO);
CREATE INDEX ZFAILEDBANKINFO_ZDETAILS_INDEX ON ZFAILEDBANKINFO (ZDETAILS);
 
sqlite> select * from ZFAILEDBANKINFO;
1|2|1|1|Test Bank|Testland|Testville
2|2|1|2|Test Bank|Testland|Testville
3|2|1|3|Test Bank|Testland|Testville
 
sqlite> select * from ZFAILEDBANKDETAILS;
1|1|1|12345|1|292794835.855615|292794835.679693
2|1|1|12345|2|292794875.943392|292794875.768675
3|1|1|12345|3|292795809.375025|292795809.215297
 
sqlite> select * from Z_PRIMARYKEY;
1|FailedBankDetails|0|3
2|FailedBankInfo|0|3

这里有段快速描述。Z_METADATA包含了一些关于Core Data需要实现的模型信息。Z_PRIMARYKEY包含了(在其他东西里面)各个实体所用到的最大key。

至于ZFAILEDBANKINFO跟ZFAILEDBANKDETAILS,这些是我们的主要数据表。Z_PK是各个表的唯一id,Z_ENT是他们的实体id(跟Z_PRIMARYKEY表中列出的一样),最后那些是我们的普通字段。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在运行代码时,出现报错 "fatal error: opencv2/core.hpp: No such file or directory"。这个错误通常是由于缺少OpenCV库文件或者库文件路径设置错误导致的。解决这个问题的思路如下: 1. 首先,确定你的系统中是否安装了OpenCV库。可以通过打开终端并输入"pkg-config --modversion opencv"来检查OpenCV的安装情况。如果没有安装,你需要先安装OpenCV。 2. 如果已经安装了OpenCV,你需要检查代码中的头文件路径是否正确。在你的代码中找到包含头文件"opencv2/core.hpp"的地方,确保路径正确。如果路径错误,你需要更新头文件路径。 3. 你可以尝试打开并检查"opencv4.pc"文件。在这个文件中,你可以查找"libdir"和"includedir"的设置。根据上述报错信息,你可以进入文件夹"/usr/local/opt/opencv"查看文件结构,并确保库文件和头文件的路径正确。 综上所述,你可以按照以上步骤来解决报错 "fatal error: opencv2/core.hpp: No such file or directory"。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【OpenCV4】fatal error: opencv2/core.hpp: No such file or directory 解决方法](https://blog.csdn.net/qq_42067550/article/details/122636151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [fatal error: opencv2\core\core.hpp: No such file or directory](https://blog.csdn.net/qq_33577181/article/details/125819397)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值