Использование UIManagedDocument для загрузки базы данных sqlite - PullRequest
1 голос
/ 09 марта 2012

Я использую Контекст UIManagedDocument для взаимодействия с моей базовой моделью данных. Тем не менее, я хотел бы первоначально загрузить контакт хранилища Persistant из локальной базы данных sqlite, которая у меня есть. Я считаю, что я должен использовать configurePersistentStoreCoordinatorForURL : но не знаю, как это сделать. Все, что я нашел в магазине Apple, было примером с базовыми данными делегата приложения, а не с этой функцией или способом UIManagedDocument. Моя исходная база данных sqlite в папке ресурсов называется source_from.sqlite , а модель данных называется Source.xcdatamodeld

Также я предпочитаю иметь новую базу данных sqlite в пакете документов. Не уверены, произойдет ли миграция автоматически?

Спасибо за вашу помощь,

Росс

Вот что у меня есть, и я планирую сделать это методом инициализации:

-(void) initializeSourceDatabaseWithData:(UIManagedDocument *) sourceDatabase{
  // if no persistent store for the uidocument preload it 
  // from sqlite file
}

-(void) useDocument{
    if (![[NSFileManager defaultManager] fileExistsAtPath:[self.sourceDatabase.fileURL path]]){
        [self.sourceDatabase saveToURL:self.sourceDatabase.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success){
            [self setupFetchedResultController]; 
            [self initializeSourceDatabaseWithData:self.sourceDatabase];

         }];
    }else if (self.sourceDatabase.documentState == UIDocumentStateClosed){
        [self.sourceDatabase openWithCompletionHandler:^(BOOL success){
         [self setupFetchedResultController];   
        }];
    }else if(self.sourceDatabase.documentState == UIDocumentStateNormal){
        [self setupFetchedResultController];

    }
}

-(void) setSourceDatabase:(UIManagedDocument *)sourceDatabase{
    if (sourceDatabase != _sourceDatabase){
        sourceDatabase = _sourceDatabase;
        [self useDocument];
    }
}

-(void) viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];

    if (!self.sourceDatabase){
        NSURL * url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
        url = [url URLByAppendingPathComponent:@"Source Database"];
        self.sourceDatabase = [[UIManagedDocument alloc] initWithFileURL:url];
    }
}

1 Ответ

1 голос
/ 11 марта 2012

Я считаю, что лучший способ - это создать подкласс UIManagedDocument Class и реализовать PersistanceStoreConfiguration, чтобы он загружал файл за пределы пакета документа.

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