在我的项目中,我使用CoreData来创建和使用数据库,它工作得很好。现在我有一个SQLite数据库文件(.db),我想将它集成到我的项目中并使用它(使用coredata)。
我已将.db文件添加到我的项目中,并使用以下代码在Documents目录中创建了它的可写副本 - :
- (void)createEditableCopyOfDatabaseIfNeeded {
// First, test for existence.
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"wordlist1000.db"];
success = [fileManager fileExistsAtPath:writableDBPath];
if (success)
return;
// The writable database does not exist, so copy the default to the appropriate location.
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"wordlist1000.db"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!success) {
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
}
现在,当我尝试从数据库中获取结果时,我收到此错误
SQLite错误代码:1,'没有这样的表:Z_METADATA',NSSQLiteErrorDomain = 1}
请告诉我如何从这里开始。一些代码示例会有很大的帮助。
总结一下,我只想导入一个外部数据库,并使用CoreData在我的xCode项目中使用它。
谢谢!
答案 0 :(得分:2)
你做不到。 Core Data不是SQLite的简单包装器。它提供了一个非常不同的API,并使用自己的,未记录的SQLite模式。 SQLite是一个实现细节,而不是你可以通过Core Data直接使用的东西。
如果您想将SQLite数据导入Core Data,您需要:
您可能只想将数据保留在SQLite中。 FMDB和PLDatabase提供了非常方便的包装器,使您可以继续在代码中使用SQL-isms而不是切换到Core Data方法。
答案 1 :(得分:1)
核心数据在sqlite中存储数据的方式与您存储的方式不同。核心数据创建其他表以保存有关您的实体的信息。因此,sqlite db必须相同,以便在操作中不会出现任何问题。
只需关注Ray Wenderlich's great Core Data Tutorial: How To Preload/Import Existing Data