ios - 将 SQLite 导入 CoreData
<p><p>我在 CoreData 中完全是菜鸟,我遇到了麻烦。我的测试数据库包含 1 个名为 ZDOCTOR 的表</p>
<pre><code>CREATE TABLE "ZDOCTOR" (
"id" integer NOT NULL ON CONFLICT REPLACE DEFAULT 0,
"doctorName" text,
"doctorSpec" text,
PRIMARY KEY("id")
)
</code></pre>
<p>App .xcdatamodel 有 1 个对应的实体,名为“Doctor”<img src="/image/Yo0cm.png" alt="enter image description here"/> </p>
<p>我的设置管理上下文方法:</p>
<pre><code>- (void)setupManagedObjectContext
{
_objectContext = [ initWithConcurrencyType:NSMainQueueConcurrencyType];
_objectModel = ;
NSError *error = nil;
NSURL *appDocumentDir = [[ URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
NSString *documentsStorePath = [ stringByAppendingPathComponent:@"MyApp.sqlite"];
if (![ fileExistsAtPath:documentsStorePath]) {
NSString *defaultStorePath = [ pathForResource:@"MyApp" ofType:@"sqlite"];
if (defaultStorePath) {
[ copyItemAtPath:defaultStorePath toPath:documentsStorePath error:NULL];
}
}
NSPersistentStoreCoordinator *coordinator = [ initWithManagedObjectModel:_objectModel];
NSURL *defaultStoreURL = ;
;
if (error) {
NSLog(@"%@", error);
abort();
}
;
}
</code></pre>
<p>在 <code>;</code> 我得到错误 <code>SQLite error code:1, 'table already exists'</code></code>.</p>
<p>但如果我将表重命名为其他任何名称,一切正常,除了 <code></code> 在 <code>-performFetch:</code></p> 之后为空</p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>这是因为您尝试手动创建 SQLite 表,而不是让 Core Data 这样做,而您做错了。在两个意义上是错误的:(1)您的方案对于 Core Data 不正确(表名可能是正确的,其他所有内容都是错误的),以及(2)实际上没有正确的方法,因为 Core Data 模式是使用未记录的规则创建的。</p>
<p>我不确定您的目标是什么。这不是 Core Data 的设计用途。它使用 SQLite 的事实是一个没有反射(reflect)在 Core Data 的 API 中的实现细节(它也可以使用非 SQLite 存储)。如果您担心实际的架构,那么您已经在做 Core Data 错误了。您当然可以以不同于其设计用途的方式使用 Core Data,但如果您这样做了,那么您将承担这样做的所有麻烦和风险。</p>
<p>至于你描述的症状,错误<code>table already exists</code>很清楚。您创建了一个与 Core Data 想要使用的名称相同但架构冲突的表。 Core Data 对此 react 不佳。 </p>
<p>重命名表后的空提取请求是有意义的。 Core Data 正在创建自己的表,并且(可能)忽略了您创建的表。</p>
<p>如果您尝试创建一个预先填充的数据存储,那么还有其他 SO 问题涵盖了这一点。通常,它们涉及在 Core Data 中创建预先填充的存储,然后保存该文件以供以后重复使用。</p></p>
<p style="font-size: 20px;">关于ios - 将 SQLite 导入 CoreData,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/25283625/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/25283625/
</a>
</p>
页:
[1]