簡體   English   中英

如果取消NSDocument中的保存操作,則無法退出應用

[英]Cannot quit the app if I cancel the save operation in a NSDocument

我將NSDocument類子類化,以便在保存期間具有特定的行為。 我將項目保存在文件夾中,並使用用於該項目的音頻文件創建特定的子文件夾。

我重寫了以下函數save(to:ofType:for:delegate:didSave:contextInfo)但是我注意到了一個奇怪的行為。 假設我有以下實現:

override func save(to url: URL,
                   ofType typeName: String,
                   for saveOperation: NSDocument.SaveOperationType,
                   delegate: Any?,
                   didSave didSaveSelector: Selector?,
                   contextInfo: UnsafeMutableRawPointer?) {

    guard let customURL = createCustomUrlFrom(url: url) else { return }

    super.save(to: customURL,
               ofType: typeName,
               for: saveOperation,
               delegate: delegate,
               didSave: didSaveSelector,
               contextInfo: contextInfo)
}

我嘗試創建一個自定義URL,如果我不設法這樣做,則取消保存操作。

現在,如果我在保存之前退出應用程序,則該應用程序會提示我保存。 如果無法創建自定義URL並return (在super.save…調用之前),則退出按鈕或“ cmd + q”不起作用! 我不得不退出以關閉該應用程序。

有人看到我在這里做錯了嗎? 后台是否正在運行某些阻止我關閉該應用程序的內容?

UPDATE

可能來自我們退出已編輯文檔時提示的工作表。 我們在窗口中說Do you want to save the changes made to the document “Untitled”? 使用3個按鈕Dont's savecancel save...

如果單擊保存,則該項目已經存在,我會顯示一個窗口,讓用戶替換該項目或取消保存(在createTargetUrlFrom(url:)函數中完成。如果用戶選擇取消該應用程序,則無法退出。所以我想也許第一個窗口在后台運行...

我找到了解決此問題的方法!

實際上,該應用程序正在等待對NSTerminateLater的答復。 我需要使用reply(toApplicationShouldTerminate :)函數。 所以我只是在從保護聲明返回之前添加了NSApp.reply(toApplicationShouldTerminate: false)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM