Wo fügen Sie Bereinigungscode für NSDocument-Unterklassen ein?

8

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).

    
dreamlax 16.03.2009, 04:20
quelle

2 Antworten

8

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).

    
Peter Hosey 16.03.2009, 04:58
quelle
8

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.

%Vor%

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.

    
Obliquely 17.12.2012 18:41
quelle