Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用MagicalRecord-无法从预加载的.sqlite文件中正确获取数据_Ios_Xcode_Sqlite_Core Data_Magicalrecord - Fatal编程技术网

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

Ios 使用MagicalRecord-无法从预加载的.sqlite文件中正确获取数据,ios,xcode,sqlite,core-data,magicalrecord,Ios,Xcode,Sqlite,Core Data,Magicalrecord,我正试图用神奇的记录从我的sqlite数据库中获取一些信息。 需要注意的是,此应用程序在iOS9之前工作,没有任何问题。因为iOS9崩溃了,所以我正在修改它。我安装了cocoapods,并通过pods安装了MagicalRecord,效果很好 在我的AppDelegate文件中,我使用我拥有的.sqlite文件中的数据预加载DB,并使用MagicalRecord设置CoreData堆栈 - (BOOL)application:(UIApplication *)application didFin

我正试图用神奇的记录从我的sqlite数据库中获取一些信息。 需要注意的是,此应用程序在iOS9之前工作,没有任何问题。因为iOS9崩溃了,所以我正在修改它。我安装了cocoapods,并通过pods安装了MagicalRecord,效果很好

在我的AppDelegate文件中,我使用我拥有的.sqlite文件中的数据预加载DB,并使用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”数组始终显示在日志中,如下所示:

'默认数组:'

没有显示任何条目

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


任何关于我应该从何处获取信息的想法都将不胜感激。

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


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

可能是CopyDefaultStoreIfEssential无法复制文件?这是您代码中最明显的潜在问题。我将其设置为在复制文件失败时记录消息-我在控制台中看不到失败消息。它是复制SQLite日志文件还是仅复制SQLite主文件?我相信它只是复制了SQLite主文件:您可以在此处看到CopyDefaultStoreIfEssential:这已经有一段时间了我写这个应用程序已经快两年了。我所知道的是,过去和现在只有一个.sqlite文件。我可以使用sqlite数据库浏览器查看.sqlite文件,并查看所有适当的信息。如果只有一个文件,可以,但使用sqlite数据库浏览器查看它并不相关-如果日志文件存在,它将使用日志文件。我以前从未使用过日志文件?这个应用程序运行了几年——我从来没有通过自己的承认来处理或担心过日志文件——我不知道这些是什么;所以我的印象是,日志文件不是这里的合适答案。较新版本的iOS使用不同的日志记录方案,因此额外的文件并不总是存在。如果他们在场,那么他们是绝对重要的,但如果他们不存在,那么显然他们不重要。我理解。不幸的是,他们不在,所以我会继续挖掘。谢谢你的帮助!