There are still several key details I seem to be missing.

I have a new commit 

https://github.com/ericgorr/last_saved/commit/ba462a19062fefde68f7e0f4459a0c8293332e9f

which shows an attempt to implement some of this.

I am using my AppDelegate as the restoration class. I have the following in my 
AppDelegate class:

    static func restoreWindowWithIdentifier( identifier: String, state: 
NSCoder, completionHandler: (NSWindow?, NSError?) -> Void )
    {
        let storyboard          = NSStoryboard( name: "Main", bundle: nil )
        let windowController    = 
storyboard.instantiateControllerWithIdentifier( "Document Window Controller" ) 
as! NSWindowController       
    }

Based on other information I found, I believe it is correct to use create my 
storyboard…but, what else should go in here considering that I am using core 
data to store the document data.

One problem I have is that restoreWindowWithIdentifier is never called. Why 
might this be?

In the Document class I have:

    override func makeWindowControllers()
    {
        //
        // Returns the Storyboard that contains your Document window.
        //
        let storyboard          = NSStoryboard( name: "Main", bundle: nil )
        let windowController    = 
storyboard.instantiateControllerWithIdentifier( "Document Window Controller" ) 
as! NSWindowController
        let theWindow           = windowController.window!

        theWindow.restorationClass  = AppDelegate.self
        theWindow.identifier        = "last_saved_window"
        
        self.addWindowController( windowController )
    }

to setup the window for restoration. Does this look correct?






> On Mar 11, 2016, at 2:14 AM, Quincey Morris 
> <quinceymor...@rivergatesoftware.com> wrote:
> 
> On Mar 10, 2016, at 17:05 , Eric Gorr <mail...@ericgorr.net 
> <mailto:mail...@ericgorr.net>> wrote:
>> 
>> I have a Core Data Document Based OS X application written in swift and 
>> using storyboards. Whenever I build and launch the app, instead of 
>> automatically opening the last opened document(s), it will create a new 
>> document. What I want to be able to do is have the application automatically 
>> restore whatever documents were last opened on application launch, if they 
>> are available. How can I do this?
> 
> I believe there’s nothing special to ease this case (as opposed to 
> NSDocument-based apps, which have state restoration support provided by 
> NSDocumentController). You’ll have to do this manually:
> 
> 1. Set a state restoration class on each restorable window. You might use the 
> window controller class, or the app delegate class, depending on what’s 
> convenient.
> 
> 2. Implement the state restoration protocol in this class. This is basically 
> a way of establishing a link between a restoration ID and a window that may 
> or may not exist at the time this is invoked.
> 
> 3. Save and restore custom state in a suitable place, either a subclass of 
> NSWindow, or a subclass of NSWindowController: a NSResponder subclass that’s 
> going to be in the responder chain.
> 
> The trick to it is to remember that state restoration is a layer on top of 
> normal NSWindow handling, so you’re in charge of (re)creating the windows 
> when the app launches. Window controllers are not intrinsically involved in 
> state restoration, but in most cases (I’d imagine) it’s going to be easiest 
> to centralize the actual work in the window controller.
> 
> There’s been another thread about this in the last week or so, where we went 
> into this in a fair amount of detail.

_______________________________________________

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