私の Mac アプリには、実行時間の長いエクスポート操作を実行するコードがあります。エクスポートの最後に、ユーザー通知を作成して、エクスポートが完了したことをユーザーに知らせます。
- (NSUserNotification*)deliverNotificationWithSound:(NSString*)sound title:(NSString*)title messageFormat:(NSString*)message {
NSUserNotification * note = [NSUserNotification new];
note.soundName = sound;
note.title = title;
note.informativeText = [NSString stringWithFormat:message, NSRunningApplication.currentApplication.localizedName, self.document.displayName];
note.userInfo = @{ @"documentFileURL": self.document.fileURL.absoluteString };
[NSUserNotificationCenter.defaultUserNotificationCenter deliverNotification:note];
return note;
}
次に、エクスポートに関する詳細 (発生した警告、便利な「表示」ボタンなど) を記載したシートを作成します。彼らがシートを閉じると、次のように通知を削除したいと思います。
[NSUserNotificationCenter.defaultUserNotificationCenter removeDeliveredNotification:note];
ただし、これによって実際に通知センターから通知が削除されるわけではありません。ブレークポイントを設定しました。-removeDeliveredNotification:
行は実行され、nilnote
ではありません。何を与える?