加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 在MagicalRecord中使用现有的SQLite数据库

发布时间:2020-12-16 10:33:53 所属栏目:百科 来源:网络整理
导读:我创建了一个SQLite数据库,其中包含使用 this tutorial的一些JSON的记录,我想使用MagicalRecord来查询它. MagicalRecord看到NSManagedObject(BlogPost)并且可以创建记录,但是它没有看到预先填充的记录,所以我猜它没有看到我添加的SQLite文件.我已经验证了SQL
我创建了一个SQLite数据库,其中包含使用 this tutorial的一些JSON的记录,我想使用MagicalRecord来查询它.

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

在应用程序中:didFinishLaunchingWithOptions:,我把:

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

并在applicationWillTerminate ::

[MagicalRecord cleanUp];

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

有任何想法吗?

解决方法

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

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”];之前.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读