1

私は- (void)windowControllerDidLoadNib:(NSWindowController *)aController、ドキュメントがドキュメントベースのアプリケーションにロードされたことを確認するために使用します。しかし、ドキュメントが閉じられていることを確認するには、どのような方法を使用する必要がありますか?テキストボックスの内容をNSUserDefaultsに保存したいのですが、ドキュメントが閉じられるたびに呼び出されるメソッドが見つかりません。私はWebを検索し、xcodeにヒントとして表示されるメソッドを調べましたが、運がありませんでした。助けていただければ幸いです。

ありがとう

4

1 に答える 1

4

ドキュメントのクリーンアップを実行するメソッドを監視NSApplicationWillTerminateNotificationしてオーバーライドします(アプリの終了時に呼び出されません!)[NSDocument close][NSDocument close]

MyDocument.h:

@interface MyDocument : NSDocument
{
    BOOL _cleanedUp;    // BOOL to avoid over-cleaning up
    ...
}

@end

MyDocument.m:

// Private Methods
@implementation MyDocument ()

- (void)_cleanup;

@end

@implementation MyDocument

- (id)init
{
    self = [super init];
    if (self != nil)
    {
        _cleanedUp = NO;

        // Observe NSApplication close notification
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(_cleanup)
                                                     name:NSApplicationWillTerminateNotification
                                                   object:nil];
    }
    return self;
}

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];

    // I'm using ARC so there is nothing else to do here
}

- (void)_cleanup
{
    if (!_cleanedUp)
    {
        _cleanedUp = YES;
        logdbg(@"Cleaning-up");

        // Do my clean-up
    }
}

- (void)close
{
    logdbg(@"Closing");

    [self _cleanup];

    [super close];
}
于 2013-02-14T12:42:15.453 に答える