Ho un'app per iPhone che utilizza CoreData. Di recente ho apportato alcune modifiche minori al modello di dati e ora ogni volta che si apre l'app viene visualizzato l'errore "Impossibile trovare il modello per l'archivio di origine".La migrazione di CoreData iPhone non riesce con "Impossibile trovare il modello per l'archivio di origine"
Ho 2 versioni del modello dati e le uniche modifiche apportate sono state alcune aggiunte di alcuni campi. Stavo seguendo la guida here che funzionava inizialmente, quindi solo oggi, dopo aver aggiunto alcuni campi aggiuntivi, si interrompe. Tutti i campi aggiuntivi sono contrassegnati come facoltativi e tutti hanno valori predefiniti. Il codice di migrazione è seguito:
NSURL *storeUrl = [NSURL fileURLWithPath:[[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"xxx.sqlite"]];
// migration options
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]) {
...
}
Il managedObjectModel viene creato correttamente qui:
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"DataModelName" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
return managedObjectModel;
}
ho rintracciato il problema di una mancata corrispondenza nella versione ha per 1 soggetto. L'errore che viene gettato include questo ha per l'entità:
MyEntityName = <cc1456b7 b12d0d05 21930308 94ccc078 27a6c345 8847c738 e3a9ae7e 0be9535d>;
ma l'hash nel VersionInfo.plist nel pacchetto applicazione è:
MyEntityName = <fede6b59 462442d1 8fc98226 b9f8f745 3250dabd ee188248 cb97b1d0 8a74eef3>;
Non ci sono altri soggetti in tutto il VersionInfo. plist con l'hash <cc1456b7....>
.
Ho sicuramente modificato la versione 2 dopo aver eseguito l'app. Quale sarebbe il modo migliore per procedere con questo? Sicuramente non voglio rilasciare questo in produzione e gli utenti perdono i loro dati perché ho incasinato durante dev. Posso creare una versione 3 con le modifiche finali ed essere a posto? –
Se non hai rilasciato la versione 2 per gli utenti, non avranno alcun problema. Stai avendo problemi perché hai salvato con "vecchia versione 2" e stai provando a caricarlo con "nuova versione 2". Aggiungere nuove versioni non necessarie del modello non fa male, però; rende la tua app un po 'più grande. –
Eccellente. Stavo andando fuori di testa perché alcuni dei nostri tester interni stavano ricevendo errori, ma probabilmente a causa dello stesso problema che stavo eseguendo una versione con più modifiche. –