Ich habe eine dokumentbasierte Anwendung und ich habe NSDocument
unterklassifiziert und die erforderlichen Methoden zur Verfügung gestellt, aber mein Dokument benötigt eine umfangreiche Bereinigung (muss externe Tasks ausführen usw.). Wo ist der beste Platz dafür? Ich habe ein paar verschiedene Methoden ausprobiert wie:
close
close:
canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo
dealloc
Wenn ich es in dealloc
schreibe, wird es manchmal aufgerufen und manchmal nicht (Drücken von Befehl + Q scheint die Freigabe meines Dokuments zu umgehen), aber es ist zwingend erforderlich, dass dieser Code ohne Fehler aufgerufen wird (außer unerwartetes Programm) beendet).
Jedes Dokument muss sich als Beobachter in das lokale Benachrichtigungscenter für NSApplicationWillTerminateNotification
einfügen. Rufen Sie in seiner Benachrichtigungsmethode seine Bereinigungsmethode auf (die Sie auch von dealloc
oder close
aufrufen sollten).
Die richtige Antwort hier passte nicht zu meinem Anwendungsfall, aber die Frage ist richtig. Daher die zusätzliche Antwort.
Mein Anwendungsfall: Schließen eines Dokuments (möglicherweise eines von mehreren, die geöffnet sind), aber kein Schließen der Anwendung.
In diesem Fall (zum Zeitpunkt des Schreibens und wenn ich nicht nur an der falschen Stelle suche) Dokumentation ist nicht so hilfreich wie es sein könnte.
Ich habe einen canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo:
override in meiner NSDocument-Unterklasse hinzugefügt und in diesem super aufgerufen. Die Dokumentation sagt nicht, ob Sie Super aufrufen müssen, aber ein wenig Protokollierung zeigt, dass das System einen Selektor und einen Kontext bereitstellt. Diese Methode wird unmittelbar vor dem Schließen des Dokuments aufgerufen.
Es gibt eine nützliche Diskussion dieser Methode auf CocoaBuilder . Wenn es Nachteile bei diesem Ansatz oder bessere Möglichkeiten dafür gibt, kommentieren Sie bitte.
Tags und Links macos cocoa nsdocument document-based