2012-03-08 2 views
1

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

Кроме того, я предпочитаю иметь новую БД 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]; 
    } 
} 
+0

Следующее решение (http://readncode.com/blog/Load-SQLite-db-into-Core-Data-in-iOS-5/) Делает то, что мне нужно, но с помощью утилиты кажется слишком большой работой для Что мне нужно. Нужно ли использовать эту функцию для установки постоянного хранилища? –

ответ

1

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

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