使用MagicalRecord - 无法从预加载.sqlite文件
问题描述:
我试图让我的神奇纪录SQLite数据库的一些信息,适当地获取数据。 应该指出 - 这个应用程序在iOS9之前没有任何问题。自iOS9以来,它崩溃了,所以我正在对它进行重构。我安装了cocoapods并通过豆荚安装了MagicalRecord(工作正常)。使用MagicalRecord - 无法从预加载.sqlite文件
在我的AppDelegate文件I预装DB数据从.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;
}
阵列 '学校',始终日志这样在出现。
好奇为什么。我检查了我正在加载的.sqlite文件,并且它加载了所有适当的信息。
我应该怎样领导才能提取信息的任何想法,将不胜感激。
答
根据您创建预加载的SQLite文件的方式,很可能有三个文件而不是一个 - 主文件.sqlite
加上另外两个文件.sqlite-wal
和.sqlite-shm
。如果是这种情况,则大部分或全部数据将存在于这些文件中。实际上,只复制.sqlite
文件将删除所有数据,同时保持数据模型不变。所以你仍然可以打开文件,但没有什么可以取。
您将需要这些文件,以保证数据的完整副本。
也许'copyDefaultStoreIfNecessary'未能复制的文件?这是代码中最明显的潜在问题。 –
如果它无法复制文件,我将它设置为记录消息 - 我在控制台中看不到失败消息。 – Hanny
它复制SQLite日志文件或只是主SQLite文件? –