在MagicalRecord中使用现有的SQLite数据库

时间:2013-06-27 19:20:07

标签: objective-c core-data magicalrecord

我创建了一个SQLite数据库,其中包含使用this tutorial的某些JSON的记录,我想使用MagicalRecord进行查询。

MagicalRecord看到NSManagedObject(BlogPost)并且可以创建记录,但是它没有看到预先填充的记录,所以我猜它没有看到我添加的SQLite文件。我已经验证了SQLite数据库确实包含使用SQLite客户端的行。

application:didFinishLaunchingWithOptions:中,我说:

[MagicalRecord setupCoreDataStackWithStoreNamed:@"DBG.sqlite"];

applicationWillTerminate:

[MagicalRecord cleanUp];

当我在控制器中调用[BlogPost MR_findAll]时,它会返回一个空集。 DBG.sqlite位于项目目录的根目录下,我尝试将其放入“Copy Bundle Resources”,但blogPosts仍然返回一个空集。

有什么想法吗?

1 个答案:

答案 0 :(得分:13)

问题最终是需要将预加载的SQLite数据库复制到应用程序的db的默认路径:

NSArray *paths = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
NSURL *documentPath = [paths lastObject];

NSURL *storeURL = [documentPath URLByAppendingPathComponent:@"DBG.sqlite"];

if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL path]]) {
    NSURL *preloadURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"DBG" ofType:@"sqlite"]];
    NSError* err = nil;

    if (![[NSFileManager defaultManager] copyItemAtURL:preloadURL toURL:storeURL error:&err]) {
        NSLog(@"Error: Unable to copy preloaded database.");
    }
}

这应该放在[MagicalRecord setupCoreDataStackWithStoreNamed:@"DBG.sqlite"];之前。