Looks pretty standard, but I would try commenting out the call to 
setMetadataForStoreAtURL:
Besides that, I don't know what to suggest.

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].
>>>>> 
> 
> 
> 
> 


_______________________________________________

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

Reply via email to