我有三個DataModel在我的應用程序中定義。我的問題是,如果我需要三種不同的背景?所以三個不同的sqlite文件?用於多個dataModels的多ObjectContext?
目前我每次保存記錄到我的數據庫我做到以下幾點:
managedObjectContext = [[AppDelegate sharedAppDelegate] getManagedObjectContextWithDB:@"TestDB.sqlite"];
或者如果我保存記錄到我的其他的DataModel我做的:
managedObjectContext = [[AppDelegate sharedAppDelegate] getManagedObjectContextWithDB:@"TestDB2.sqlite"];
那麼,那正確的方式?或者我必須只有一個上下文適用於所有三種模式?
這裏有其他的方法:
- (NSManagedObjectContext *)getManagedObjectContextWithDB:(NSString *)db
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinatorWithDB:db];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return _managedObjectContext;
}
- (NSManagedObjectModel *)managedObjectModel {
if (_managedObjectModel != nil) {
return _managedObjectModel;
}
_managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
return _managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinatorWithDB:(NSString *)db {
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory]
stringByAppendingPathComponent: db]];
NSDictionary *options = @{
NSMigratePersistentStoresAutomaticallyOption : @YES,
NSInferMappingModelAutomaticallyOption : @YES
};
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]
initWithManagedObjectModel:[self managedObjectModel]];
if(![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil URL:storeUrl options:options error:&error]) {
/*Error for store creation should be handled in here*/
}
return _persistentStoreCoordinator;
}
嗨,thx的信息...但目前我有三個* .xcdatamodel文件。我唯一的問題是,如果我還需要三個* .sqlite文件? – davidOhara
假設您想將內容保存到磁盤,那麼是的,只有在使用NSInMemoryStoreType選項時,您不需要後備存儲。對於模型文件,您需要三個持久性存儲協調器,因此需要三個上下文和三個存儲文件,希望這有助於。 –
所以我使用的代碼是正確的? – davidOhara