Знам, че това е често задаван въпрос, но нито едно от решенията, които открих, изглежда не работи за мен.
Това е моята ситуация: имам един модел на данни за моето приложение и исках да добавя версия към него. Така че в XCode направих Design -> Data Model -> Add Model Version. Също така актуализирах метода persistentStoreCoordinator на моя делегат, за да изглежда така:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory]
stringByAppendingPathComponent: @"foo.sqlite"]];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
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;
}
Само за да се уверя, че всичко все още работи, направих чисто всичко, изградих и го тествах в симулатора. Всичко работеше досега.
След това избрах модела на данните за новата версия, зададох го да бъде текущата версия с помощта на XCode и добавих един допълнителен атрибут към обект. След това направих чисто всичко, изграждане. И сега, когато стартирам приложението, то се срива с тази грешка: „Не мога да обединя модели с два различни обекта с име „foo“.
какво правя грешно Опитах се да се уверя, че към целта не е добавен модел на данни, като добавих само текущата версия на модела на данни към целта, и двете. Всеки път, когато тествам, се уверявам, че почиствам всички.
Може ли някой да хвърли малко светлина защо не работи за мен?
РЕДАКТИРАНЕ:
ето моят метод managedObjectModel:
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return managedObjectModel;
}