OK, I tried commenting out the setMetadataForStoreAtURL: part, but still it fails.
Maybe I'm going to have to use one of my precious DTS tickets for this. Martin On Jun 18, 2013, at 08:32 PM, Martin Hewitson <martin.hewit...@aei.mpg.de> wrote: > Yes, alas, alas I have tried all of that and checked all settings, to no > avail. > > If I select the old model version, everything works fine (at least old > documents can be opened). > > Thanks, > > Martin > > On 18 Jun 2013, at 19:00, davel...@mac.com wrote: > >> >> Are you 100% certain you set the "Versioned Core Data Model" "current" >> setting to the latest model in the inspector pane on the right side of Xcode. >> >> Have you tried doing a clean and rebuilding? I think I once had an issue >> where it didn't seem to start using the new model until I did a clean build >> (or in my case for iOS, also deleted the app from the simulator and rebuilt >> it so it installed the app fresh in the simulator). >> >> HTH, >> Dave >> >> >> On Jun 18, 2013, at 11:37 AM, Martin Hewitson <martin.hewit...@aei.mpg.de> >> wrote: >> >>> >>> On Jun 18, 2013, at 05:26 PM, Dave Fernandes <dave.fernan...@utoronto.ca> >>> wrote: >>> >>>> Looks pretty standard, but I would try commenting out the call to >>>> setMetadataForStoreAtURL: >>> >>> I'll try this and report back. >>> >>>> Besides that, I don't know what to suggest. >>> >>> I know, it's a peculiar case. I've performed light migration many, many >>> times, and this is the first time it has taken me more than a couple of >>> minutes to resolve. >>> >>> Thanks, >>> >>> Martin >>> >>>> >>>> On 2013-06-18, at 11:14 AM, Martin Hewitson <martin.hewit...@aei.mpg.de> >>>> wrote: >>>> >>>>> The code is below. Anything look suspicious there? >>>>> >>>>> Thanks, >>>>> >>>>> Martin >>>>> >>>>> - (BOOL)configurePersistentStoreCoordinatorForURL:(NSURL*)url >>>>> ofType:(NSString*)fileType >>>>> modelConfiguration:(NSString*)configuration >>>>> storeOptions:(NSDictionary*)storeOptions >>>>> error:(NSError**)error >>>>> { >>>>> NSMutableDictionary *options = nil; >>>>> if (storeOptions != nil) { >>>>> options = [storeOptions mutableCopy]; >>>>> } else { >>>>> options = [[NSMutableDictionary alloc] init]; >>>>> } >>>>> >>>>> options[NSMigratePersistentStoresAutomaticallyOption] = @YES; >>>>> options[NSInferMappingModelAutomaticallyOption] = @YES; >>>>> BOOL result = [super configurePersistentStoreCoordinatorForURL:url >>>>> ofType:fileType >>>>> modelConfiguration:configuration >>>>> storeOptions:options >>>>> error:error]; >>>>> options = nil; >>>>> >>>>> if (result) { >>>>> NSPersistentStoreCoordinator *psc = [[self managedObjectContext] >>>>> persistentStoreCoordinator]; >>>>> NSPersistentStore *pStore = [psc persistentStoreForURL:url]; >>>>> id existingMetadata = [psc metadataForPersistentStore:pStore][(NSString >>>>> *)kMDItemKeywords]; >>>>> if (existingMetadata == nil) { >>>>> result = [self setMetadataForStoreAtURL:url]; >>>>> } >>>>> } >>>>> >>>>> return result; >>>>> } >>>>> >>>>> >>>>> >>>>> >>>>> On Jun 18, 2013, at 05:04 PM, Dave Fernandes <dave.fernan...@utoronto.ca> >>>>> wrote: >>>>> >>>>>> What does your >>>>>> configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error: >>>>>> do? >>>>>> >>>>>> On 2013-06-18, at 5:09 AM, Martin Hewitson <martin.hewit...@aei.mpg.de> >>>>>> wrote: >>>>>> >>>>>>> Another question on this problem: does anyone know if >>>>>>> NSStoreModelVersionIdentifiers is used in looking for a source model to >>>>>>> infer a mapping model from? >>>>>>> >>>>>>> To recap: >>>>>>> >>>>>>> 1) Loading an existing document with the version 11 model works >>>>>>> 2) Adding a new version (12) with a single new boolean property on one >>>>>>> entity triggers an automatic migration but the source model is not found >>>>>>> 3) During the failure, all hashes match between the XML store and the >>>>>>> current model version except for the one entity I modified (so the >>>>>>> migration is correctly triggered) >>>>>>> 4) I've confirmed the source model can be loaded in principle by using >>>>>>> -metadataForPersistentStoreOfType: and >>>>>>> -mergedModelFromBundles:forStoreMetadata: >>>>>>> 5) With the new version 12 model I can successfully create new >>>>>>> documents then save and load them. >>>>>>> 6) Overriding -managedObjectModel in my NSPersistentDocument to ensure >>>>>>> the correct momd is loaded doesn't fix the problem. >>>>>>> >>>>>>> I'm at a bit of a loss what to try next.... >>>>>>> >>>>>>> Martin >>>>>>> >>>>>>> >>>>>>> On Jun 18, 2013, at 08:38 AM, Dave Fernandes >>>>>>> <dave.fernan...@utoronto.ca> wrote: >>>>>>> >>>>>>>> cc'ing the list this time… >>>>>>>> >>>>>>>> On 2013-06-18, at 2:26 AM, Martin Hewitson >>>>>>>> <martin.hewit...@aei.mpg.de> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> On Jun 18, 2013, at 08:08 AM, Jerry Krinock <je...@ieee.org> wrote: >>>>>>>>> >>>>>>>>>> >>>>>>>>>> On 2013 Jun 17, at 21:13, Martin Hewitson >>>>>>>>>> <martin.hewit...@aei.mpg.de> wrote: >>>>>>>>>> >>>>>>>>>>> I did try making a mapping model (this is something I've done in >>>>>>>>>>> the past in other apps) but I got the same error message. >>>>>>>>>> >>>>>>>>>> Oh, well. >>>>>>>>>> >>>>>>>>>>> Is the idea that the auto-migration magic will pick up the mapping >>>>>>>>>>> model and use it, if it finds it? >>>>>>>>>> >>>>>>>>>> Yes. I think the only three things you need do are to specify the >>>>>>>>>> current version, and add .xcdatamodel and .xcmappingmodel files to >>>>>>>>>> your app target. Xcode compiles the .xcdatamodel files into .mom >>>>>>>>>> files that all get put into a .momd folder which also contains a >>>>>>>>>> VersionInfo.plist that specifies the current version and the hashes >>>>>>>>>> for the entities in each version; also it compiles each >>>>>>>>>> .xcmappingmodel files into a .cdm file. Finally, the .momd folder >>>>>>>>>> and all the .cdm files get packaged into your product's Resources. >>>>>>>>>> Given those pieces, it's a pretty easy reverse-engineering exercise >>>>>>>>>> to figure out what the auto-migration magic must be doing. >>>>>>>>> >>>>>>>>> According to your description, my app bundle's in good shape. I tried >>>>>>>>> making a mapping model and the cdm file shows up in Resources, as >>>>>>>>> expected. The momd folder contains all the expected mom and one omo >>>>>>>>> file. >>>>>>>>> >>>>>>>>>> >>>>>>>>>> Lately, Xcode has also been adding a .omo file, just one, named for >>>>>>>>>> the current version, to the .momd. On Stack Overflow, 'Bobson' >>>>>>>>>> guessed that this was "the same data [as the .mom file], organized >>>>>>>>>> differently". Probably not a bad guess. Maybe optimized for faster >>>>>>>>>> access by Mountain Lion or something. >>>>>>>>> >>>>>>>>> Yes, I just noticed this ono file in the app bundle. I was wondering >>>>>>>>> what that was... >>>>>>>>> >>>>>>>>> <snip> >>>>>>>>> >>>>>>>>>>> Then I go to open an existing document and I get the dreaded >>>>>>>>>>> "migration failed, missing source managed object model" error. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> After writing this message, you know I think it's more likely that >>>>>>>>>> you screwed up and did this… >>>>>>>>>> >>>>>>>>>> • Change the data model a little. >>>>>>>>>> • Create a document, "E". >>>>>>>>>> • Get interrupted by a fire drill. >>>>>>>>>> • Change the data model a little more. >>>>>>>>>> • Build. >>>>>>>>>> >>>>>>>>>> In this case, indeed *no* version of your app will ever be able to >>>>>>>>>> open that document "E". If this is your "existing" document, the >>>>>>>>>> "migration failed, missing source managed object model" error is >>>>>>>>>> expected. >>>>>>>>> >>>>>>>>> I don't think this is the case since I can still drop back to version >>>>>>>>> 11 and open the 'existing' document. I just made a test app and >>>>>>>>> managed to perform a lightweight migration much like the one I'm >>>>>>>>> trying here, so I guess I'm doing something wrong. I'll try to absorb >>>>>>>>> your other detailed comments and see if I can get some more debug >>>>>>>>> output to figure out what's going on. >>>>>>>>> >>>>>>>>> I just had another thought.... I have another core data model in the >>>>>>>>> app. I wonder if the NSPersistentDocument infrastructure is picking >>>>>>>>> up the wrong model? As I'm looking through the project, I realise I >>>>>>>>> don't know how the document knows which core data model to use.... >>>>>>>>> OK, back to the documentation on NSPersistentDocument. >>>>>>>> >>>>>>>> By default it will merge all models in the main bundle. So if the >>>>>>>> other model changed, you would also have a problem. If you want to >>>>>>>> specify only one model for the document, you should override >>>>>>>> [NSPersistentDocument managedObjectModel]. >>>>>>>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Martin Hewitson Albert-Einstein-Institut Max-Planck-Institut fuer Gravitationsphysik und Universitaet Hannover Callinstr. 38, 30167 Hannover, Germany Tel: +49-511-762-17121, Fax: +49-511-762-5861 E-Mail: martin.hewit...@aei.mpg.de WWW: http://www.aei.mpg.de/~hewitson ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com