Re: CoreData, automatic migration and sandbox problems.
Re: CoreData, automatic migration and sandbox problems.
- Subject: Re: CoreData, automatic migration and sandbox problems.
- From: Samuel Williams <email@hidden>
- Date: Tue, 05 Jun 2012 22:10:36 +1200
Thanks for the info,
I've spent quite a bit of time looking into how this would work. I found
that I can override makeDocumentWithContentsOfURL: and friends, but I'm at
a loss as to how to check whether the document needs to be migrated. I can
get the store metadata using [*NSPersistentStoreCoordinator*
metadataForPersistentStoreOfType:nil URL:contentsURL error:error] but I'm
not sure how to check whether that needs migration or not. How do I get the
latest model that would be used for the given file type? Seems like I'd
need to ask NSPersistentDocument but it doesn't provide any obvious methods
for doing that...
I was trying to figure out what is the best use-case for migration -
currently the file is modified without the user being aware of any change.
This is quite good but it fails in the sandbox since the user's explicit
permission is required to save the updated data (?). So, pending this, what
is the appropriate behaviour in the sandbox? Should we pop up a save box
asking the user to select a new location for the migration?
There is (as far as I can see) no documentation in Apple's official docs
about how to handle this situation...
What would the canonical approach be in this case?
Kind regards,
Samuel
On 29 May 2012 04:01, Dave Fernandes <email@hidden> wrote:
> If you want to check whether a store needs to be migrated and ask the
> user, you can use [NSPersistentStoreCoordinator
> metadataForPersistentStoreOfType:::] to get the metadata for the document
> in question and [NSManagedObjectModel
> isConfiguration:compatibleWithStoreMetadata:] to check whether that is
> compatible with the current MOM.
>
> A good place to do these checks is in NSDocumentController before
> attempting to open the doc.
>
> On 2012-05-28, at 9:59 AM, Samuel Williams wrote:
>
> > Hi,
> >
> > I'm having trouble with automatic migrations and sandbox.
> >
> > When the user opens an old file, the automatic migration fails due to no
> > write permission to the file.
> >
> > -
> > (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 setObject:[NSNumber numberWithBool:YES]
> > forKey:NSMigratePersistentStoresAutomaticallyOption];
> >
> > [options setObject:[NSNumber numberWithBool:YES]
> > forKey:NSInferMappingModelAutomaticallyOption];
> >
> > *//[options setObject:[NSNumber numberWithBool:YES]
> > forKey:NSReadOnlyPersistentStoreOption];*
> >
> > BOOL result =
> > [super configurePersistentStoreCoordinatorForURL:url ofType:fileType
> > modelConfiguration:configuration storeOptions:options
> >
> > error:error];
> >
> > *//if (*error) {*
> >
> > * // *** Fails here ****
> >
> > *// [[NSAlert alertWithError:*error] runModal];*
> >
> > *//}*
> >
> > [options release];
> >
> > return result;
> >
> > }
> >
> >
> > Just wondering if anyone has a suggestion about how I can avoid writing
> to
> > the file, e.g. forcing the user to re-save or duplicate the document
> before
> > attempting the migration. It works fine for non-sandbox builds.
> >
> > Kind regards,
> > Samuel
> > _______________________________________________
> >
> > Cocoa-dev mailing list (email@hidden)
> >
> > 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:
> >
> >
> > This email sent to email@hidden
>
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden