使用 MagicalRecord - 无法从预加载的 .sqlite 文件中正确获取数据

Using MagicalRecord - Not able to fetch data appropriately from pre-loaded .sqlite file

我正在尝试使用神奇的记录从我的 sqlite 数据库中获取一些信息。 应该注意 - 这个应用程序在 iOS9 之前运行没有任何问题。由于 iOS9 它崩溃了,所以我正在修改它。我安装了 cocoapods 并通过 pods 安装了 MagicalRecord(效果很好)。

在我的 AppDelegate 文件中,我使用我拥有的 .sqlite 文件中的数据预加载数据库,并使用 MagicalRecord 设置 CoreData 堆栈。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self copyDefaultStoreIfNecessary];
    //Copy the preloaded DB to the default path of the application's DB (REQUIRED)
    NSArray *paths = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
    NSURL *documentPath = [paths lastObject];
    NSURL *storeURL = [documentPath URLByAppendingPathComponent:@"Trips_54Miles.sqlite"];
    if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL path] ]) {
        NSURL *preloadURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Trips_54Miles" ofType:@"sqlite" ]];
        NSError *err = nil;
        if (![[NSFileManager defaultManager] copyItemAtURL:preloadURL toURL:storeURL error:&err]){
            NSLog(@"Error:  Unable to copy preloaded db.");
        }
    }
    //Setup Magical Record with the CoreData Stack
    [MagicalRecord setupCoreDataStackWithStoreNamed:@"Trips_54Miles.sqlite"];
    NSArray *schools = [MetaMiles MR_findAllSortedBy:@"beg_school" ascending:YES];
    NSLog(@"Default Array: %@", schools);
    return YES;
}

数组'schools',在日志中总是这样显示:

'Default Array: ( )'

没有显示条目。

很好奇为什么。我检查了正在加载的 .sqlite 文件,它加载了所有适当的信息。

任何关于我应该去哪里提取信息的想法都将不胜感激。

根据您创建预加载 SQLite 文件的方式,很可能存在三个文件而不是一个文件——主 .sqlite 文件加上另外两个文件,.sqlite-wal.sqlite-shm。如果是这种情况,大部分或所有数据都将在这些文件中。仅复制 .sqlite 文件实际上会删除所有数据,同时保持数据模型完好无损。所以你仍然可以打开文件,但是没有任何东西可以获取。

您需要复制这些文件以保持数据完整。