Wonderful! Thanks very much. I will give this a try. Writing out the core data store was the bit I was missing.
Martin On Jun 29, 2011, at 9:54 AM, Quincey Morris wrote: > On Jun 28, 2011, at 23:58, Martin Hewitson wrote: > >> In the past I achieved this in a somewhat unsatisfactory way by just calling >> newDocument: then saveDocument: and getting the user to immediately save the >> document before the app does the rest of the setup steps. > > Using the action methods (newDocument: and saveDocument:) is what makes your > approach unappealing for the user. In Snow Leopard or earlier, for a regular > document, the steps are something like this: > > 1. Get the project name and file system location. (You can use the Save panel > for this, but you put it up yourself rather than having 'newDocument:' do it. > Or, you can use some kind of custom dialog.) > > 2. Create a document file at that location. (Typically, you create a default > data model or import some data, turn it into a keyed archive, write the > archive data to a file.) > > 3. Use NSDocumentController's 'openDocumentWithContentsOfURL:display:error:' > method to open the now-existing document normally. > > You can use much the same approach for NSPersistentDocument, but step 2 is a > little different. Here's a method I wrote (based on some sample code > somewhere in the Core Data documentation, but I don't remember where) that > creates a new store. It returns a managed object context because you probably > want to put something in the store (and 'save:' it) before re-opening it as a > NSPersistentDocument in step 3. > >> + (NSManagedObjectContext*) managedObjectContextForStoreURL: (NSURL*) >> storeURL >> { >> // Find the document's model >> >> NSManagedObjectModel* model = [NSManagedObjectModel >> mergedModelFromBundles: nil]; >> if (!model) >> return nil; >> >> // Create a persistent store >> >> NSPersistentStoreCoordinator* psc = [[NSPersistentStoreCoordinator >> alloc] initWithManagedObjectModel: model]; >> if (!psc) >> return nil; >> >> NSError* error; >> NSPersistentStore* store = [psc addPersistentStoreWithType: >> NSSQLiteStoreType >> >> configuration: nil >> >> URL: storeURL >> >> options: nil >> >> error: &error]; >> if (!store) >> return nil; >> >> // Create a managed object context for the store >> >> NSManagedObjectContext* managedContext = [[NSManagedObjectContext >> alloc] init]; >> if (!managedContext) >> return nil; >> >> managedContext.persistentStoreCoordinator = psc; >> managedContext.undoManager = nil; >> >> return managedContext; >> } > > HTH > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com