CoreData обновил базу данных sqlite - PullRequest
0 голосов
/ 02 марта 2010

Я работаю над своим первым приложением, используя coredata.Все работает отлично.Когда я отлаживаю приложение на своем устройстве (без того, чтобы оно уже было установлено на устройстве), затем закрываю приложение, вручную изменяю базу данных sqlite, затем снова отлаживаю приложение, оно, похоже, использует старую версию базы данных.Если два файла sqlite имеют одно и то же имя, есть ли способ сказать ему просто заменить то, что там есть?

Вот фрагмент из моего кода:

NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"mydata.sqlite"];

    /*
     Set up the store.
     For the sake of illustration, provide a pre-populated default store.
     */
     NSFileManager *fileManager = [NSFileManager defaultManager];
     // If the expected store doesn't exist, copy the default store.
     if (![fileManager fileExistsAtPath:storePath]) {
        NSLog(@"copying default from sqlite");
        NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"mydata" ofType:@"sqlite"];
         if (defaultStorePath) {
            [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
         }
     }


    NSURL *storeUrl = [NSURL fileURLWithPath:storePath];

Как вы можете видеть,если он не находит базу данных изначально, он загружает файл sqlite из приложения.Кроме изменения имени файла sqlite или использования параметра, есть ли способ сказать «очистить» все, что у вас есть, если у вас есть что-нибудь, и начать все заново?

Я беспокоюсь о пользователях, покупающих приложениезатем, когда я выпускаю обновление, они все еще видят данные из старой версии базы данных.

Спасибо, Хауи

1 Ответ

0 голосов
/ 17 августа 2010

Вы можете удалить старую базу данных и скопировать ту, которая поставляется с вашим обновлением, так же, как вы делали это изначально.

NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"Test.sqlite"];
NSURL *storeURL = [NSURL fileURLWithPath:storePath];
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]

Вам просто нужен какой-то способ определить, устарела ли база данных.

...