2017-09-15 4 views
0

Ich habe eine Menge Zeit, NSDocuments Autosave zu arbeiten.autosavedContentsFileURL ist Null nach erfolgreichem automasaveWithDelegate

Ich habe eine NSDocument-Unterklasse, die einige Benutzereingaben benötigt und einen CoverTree für diese Daten berechnet (generiert). Nach Abschluss versuche ich, das Dokument automatisch zu speichern, um sowohl die Benutzereingaben als auch den resultierenden Baum zu erfassen. Ich versuche das Debugging zu verwenden, um herauszufinden, ob/wo ein automatisches Speichern stattgefunden hat.

Das folgende Codefragment ist von meiner Ansicht Controller

@IBAction func handleGenerate(_ sender: NSButton) 
    { 
    ... 

    // do the work 

    document.coverTree.generate(dataSet:data, source:dataSourceFinal.stringValue) 
    document.updateChangeCount(.changeDone) 
    document.autosave(withDelegate: self, didAutosave: #selector(handleDidAutosave(document:didAutosaveSuccessfully:contextInfo:)), contextInfo: nil) 
    } 

    func handleDidAutosave(document:NSDocument, didAutosaveSuccessfully:Bool, contextInfo:UnsafeMutableRawPointer) 
    { 
    print("VC::Did Autosave(document:\(document), didAutosaveSuccessfully:\(didAutosaveSuccessfully))") 
    print("VC::InPlace: \(Document.autosavesInPlace())") 
    print("VC::Autosaved at: \(document.autosavedContentsFileURL)") 
    } 

Wie oben gezeigt, die ich für den Zweck der Fehlersuche einer Beendigungsbehandlungsroutine zur Verfügung gestellt. Hier ist, was ich in der Konsole sehe:

Document::updateChangeCount 
VC::Did Autosave(document:<coverTreeDemo.Document: 0x6180000cd3c0>, didAutosaveSuccessfully:true) 
VC::InPlace: true 
VC::Autosaved at: nil 

Der Handler Abschluss wurde gesagt, die automatische Speicherung erfolgreich war (didAutosaveSucessfully auf true gesetzt wurde), aber die Lage des Autosave ist gleich Null. Ich schaute in ~/Library/Autosave Information und dort ist nichts, was ich für meine Anwendung (oder Xcode) finden kann.

Ich habe auch jede der Methoden schreiben auf meiner Dokument-Klasse instrumentiert, um auf die Konsole zu drucken, wenn sie aufgerufen wird. Ich sehe keine Ausgabe von diesen.

Warum könnte es also sein, dass der AutoSave Completion-Handler angewiesen wird, dass das Speichern erfolgreich war, wenn nichts angezeigt wird?

Beachten Sie, dass ich das Dokument erfolgreich über das Menü Datei> Speichern speichern kann (und laden Sie es mit Datei> Öffnen). Die Windows/Dokumente werden beim Start von IFF korrekt wiederhergestellt. Ich habe sie über das Menü Datei> Speichern gespeichert. Es ist nur Autosave, mit denen ich Probleme habe.

Dank viel, mike

+0

Hinweis, ich habe https://stackoverflow.com/questions/408159/cocoa-nsdocument-getting-autosave-to-work gesehen, aber nachdem ich es gelesen habe (und einige Verbesserungen vorgenommen habe), habe ich immer noch Probleme. – MikeMayer67

Antwort

0

Einfache Lösung Stopp machen dumme Fehler ist ...

meinen Code in instrumentiert für Debugging-Zwecke, overrode ich updateChangeCount eine Nachricht drucken (zu zeigen, dass es tatsächlich genannt wurde).

Ich habe vergessen, super.updateChangeCount aufzurufen. Das Dokument wurde nie als schmutzig markiert und daher nie automatisch gespeichert.

doh!

Verwandte Themen