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


_______________________________________________

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

Reply via email to