2015-06-05 26 views
2

託管對象上下文應該自動保存對嗎?我認爲這樣做是因爲在應用程序運行期間,數據可以正確提取,但在應用程序啓動之間,數據已經消失。核心數據正在保存管理對象,但數據在應用程序啓動之間不存在

這裏是我的方法來創建上下文:

+ (NSManagedObjectContext *)createMainQueueGameActivityManagedObjectContext 
{ 
    NSManagedObjectContext *managedObjectContext = nil; 

    NSPersistentStoreCoordinator *coordinator = [self createPersistentStoreCoordinatorWithInvestingGameActivityFilename:InvestingGameActivityDatabaseFilename withDataModelFilename:InvestingGameActivityDataModelFilename]; 

    if (coordinator != nil) { 
     managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; 
     [managedObjectContext setPersistentStoreCoordinator:coordinator]; 
    } 

    return managedObjectContext; 
} 

+ (NSPersistentStoreCoordinator *)createPersistentStoreCoordinatorWithInvestingGameActivityFilename:(NSString *)databaseFilename withDataModelFilename:(NSString *)dataModelFilename 
{ 
    NSPersistentStoreCoordinator *persistentStoreCoordinator = nil; 
    NSManagedObjectModel *managedObjectModel = [self createManagedObjectModelWithDataModelFilename:dataModelFilename]; 

    NSString *databasePathComponent = [NSString stringWithFormat:@"%@.%@", databaseFilename, DatabaseFileExtension]; 

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:databasePathComponent]; 

    NSError *error = nil; 
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel]; 
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { 
     /* 
     Replace this implementation with code to handle the error appropriately. 
     */ 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 

    return persistentStoreCoordinator; 
} 

+ (NSURL *)applicationDocumentsDirectory 
{ 
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
} 

+ (NSManagedObjectModel *)createManagedObjectModelWithDataModelFilename:(NSString *)dataModelFilename 
{ 
    NSManagedObjectModel *managedObjectModel = nil; 
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:dataModelFilename withExtension:DataModelFileExtension]; 
    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 

    return managedObjectModel; 
} 

回答

2

管理對象方面應該自動保存嗎?

而且我覺得是的,因爲在應用程序正在運行的時間這樣做,可以將數據正確地取出,但是應用程序啓動之間,數據已經一去不復返了。

管理對象上下文通常與便箋本進行比較。您可以從持久性存儲中將對象讀入上下文中,您可以將新對象添加到上下文中,並且可以更改上下文中的對象。只要應用程序正在運行,所有這些更改都將存在於上下文中。但是,當應用程序退出時,上下文消失,除非將其內容保存回持久存儲區,否則您的更改將丟失。要做到這一點,你需要調用-save:方法。