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

标签 objective-c core-data magicalrecord

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

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

application:didFinishLaunchingWithOptions: 中,我放了:

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

applicationWillTerminate: 中:

[MagicalRecord cleanUp];

当我在 Controller 中调用 [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"]; 之前。

关于objective-c - 在 MagicalRecord 中使用现有的 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17351493/

相关文章:

ios - 我如何添加带有事件指示器的时尚白色 uialertview

ios - MKMapView中如何实现Ground Overlays

cocoa - 从基于 View 的表格 View 中的按钮获取选定的行

unit-testing - MagicalRecord = swift_dynamicCastClassUnconditional 仅在单元测试中

ios - 新的 FBSDK 4.0+,使用访问 token 登录或共享

ios - 因类型为 Realm::LogicError: 数据类型不匹配的未捕获异常而终止

ios - 核心数据未保存在分发版本中

iphone - 使用 UIManagedDocument 在 iOS 5 中预加载核心数据数据库

iOS-MagicalRecord/AFNetworking/NSFetchedResultsController-后台重新同步过程导致永久挂起

ios - NSPredicate 未执行