iOS: как скопировать базу данных на iphone? - PullRequest
0 голосов
/ 01 ноября 2010

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

Что может быть не так с кодом ниже? До сегодняшнего утра у меня все работало нормально. По какой-то причине база данных, которая создается в каталоге Documents на iPhone, полностью пуста.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.databaseName = @"iWorkoutDatabase";
    NSArray *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentsPath objectAtIndex:0];
    self.databasePath = [[documentsDir stringByAppendingPathComponent:databaseName] retain];
}

- (void)checkAndCreateDatabase{
    BOOL databaseIsSaved;

    NSFileManager *fileManager = [NSFileManager defaultManager];
    databaseIsSaved = [fileManager fileExistsAtPath:databasePath];
    if (databaseIsSaved == YES) {
        return;
    }
    else {

        NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
        [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
    }
    [fileManager release];
}

Я схожу с ума, пытаясь понять это, поэтому было бы здорово, если бы кто-то мог мне помочь ... РЕДАКТИРОВАТЬ: я добавил соответствующий код из метода viewDidLoad, и я посмотрел на путь документов из симулятора iPhone и там был фактически создан файл, но он был пустым.

1 Ответ

1 голос
/ 01 ноября 2010

Код должен работать, я думаю.Однако есть несколько вещей, которые можно улучшить, которые также могут решить ваши проблемы:

  • не выпускайте общий экземпляр - в вашем случае не выпускайте fileManager
  • Используйте pathForResource:ofType:, чтобы получить полный путь к файлу напрямую, вместо того, чтобы создавать собственный путь

  • Откуда исходит databasePath?Правильно ли настроен?

  • Вы проверили файл базы данных, включенный в ваше приложение, возможно, он поврежден?
  • Вы пытались сделать чистую сборку?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...