2015-11-13 1 views
0

Я пытаюсь получить информацию из моей базы данных sqlite с магической записью. Следует отметить, что это приложение работало до iOS9 без каких-либо проблем. С iOS9 он падает, поэтому я перерабатываю его. Я установил cocoapods и установил MagicalRecord через стручки (которые отлично работали).Использование MagicalRecord - Невозможно получить данные из предварительно загруженного файла .sqlite

В моем файле AppDelegate я предварительно загружаю БД данными из файла .sqlite, который у меня есть, и устанавливаю стек CoreData с помощью MagicalRecord.

- (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, который я загружаю, и он загружает всю соответствующую информацию.

Любые идеи о том, куда я должен идти, чтобы вытащить информацию, будут оценены.

+0

Возможно, 'copyDefaultStoreIfNecessary' не может скопировать файл? Это наиболее очевидная потенциальная проблема в вашем коде. –

+0

У меня он установлен для регистрации сообщения, если он не может скопировать файл - я не вижу сообщение об ошибке в консоли. – Hanny

+0

Копирование файлов журнала SQLite или только основного файла SQLite? –

ответ

0

В зависимости от того, как вы создали предварительно загруженный файл SQLite, это очень вероятно, что есть три файла, а не только одно-- основного .sqlite файла плюс два других, .sqlite-wal и .sqlite-shm. Если это так, большинство или все данные будут в этих файлах. Копирование только файла .sqlite приведет к удалению всех данных при сохранении модели данных. Таким образом, вы все равно можете открыть файл, но ничего не получится.

Вам нужно будет скопировать эти файлы, чтобы сохранить данные в целости.

+0

Прошло довольно много времени (почти 2 лет), так как я написал это приложение. Я знаю, что существует только один файл .sqlite (исторически и в настоящее время). Я могу просмотреть файл .sqlite с помощью SQLite Database Browser и посмотреть всю необходимую информацию. – Hanny

+0

Если есть только один файл, хорошо, но просмотр его с помощью SQLite Database Browser не имеет значения - он будет использовать файлы журнала, если они присутствуют. –

+0

Мне никогда не приходилось использовать файлы журналов раньше? Это приложение работало пару лет - мне никогда не приходилось иметь дело с журнальными файлами или беспокоиться (через мое собственное признание - я не знаю, что это такое); поэтому у меня осталось впечатление, что файлы журнала не являются подходящим ответом здесь. – Hanny

 Смежные вопросы

  • Нет связанных вопросов^_^