2015-06-05 3 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

контекст Управляемый объект предполагается сохранить автоматически правильно?

No.

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

Контекст управляемого объекта часто сравнивается с площадкой для царапин. Вы можете читать объекты в контексте из постоянного хранилища, вы можете добавлять новые объекты в контекст, и вы можете вносить изменения в объекты в контексте. Пока приложение работает, все эти изменения будут существовать в контексте. Но когда приложение завершает работу, контекст уходит, и ваши изменения теряются, если вы не сохраните его содержимое в постоянном хранилище. Для этого вам необходимо вызвать метод -save:.

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