【问题标题】:How can I have an NSDocument-based app open Folders, but save associated doc to Application Support?如何让基于 NSDocument 的应用程序打开文件夹,但将关联的文档保存到应用程序支持?
【发布时间】:2011-08-21 01:38:15
【问题描述】:

在我的基于 NSDocument 的应用程序中,我的文档将与目录相关联(它们是目录的索引)

我希望能够根据以下用例打开/保存文档:

  1. 打开一个目录: a) 如果文件夹中有 .myapp 文件,打开它 b) 否则查看 ~/Library/Application Support/MyApp 中是否有 HASH-OF-PATH-basename.myapp 文件并打开它 b) 否则在内存中创建一个新文档

  2. 正常打开 xxx.myapp 文件

  3. 保存/自动保存 a) 如果当前文档的来源是 1b、1c 或 2,则将文件保存到 ~/Library/Application Support/MyApp/HASH-OF-PATH-basename.myapp b) 如果当前文档的来源是 1a,则保存到该 .myapp 文件

  4. 另存为/保存到 b) 将 xxxxx.myapp 保存到用户指定的任何位置

显而易见的事情似乎只是实现 readFromURL:ofType:error:L 和 writeToURL:ofType:forSaveOperation:originalContentsURL:error: 并根据保存操作的内容根据需要切换 URL。

这样我可以打开文件和文件夹,当我保存打开的文件夹时,我的文件会保存到应用程序支持,但是在 writeToURL:ofType:forSaveOperation:originalContentsURL:error 之后出现错误并显示一个对话框以下错误:

NSDocument could not delete the temporary item at
file://localhost/private/var/folders/6P/6PNpIB-6HreGE+Ikqf5dWU+++TI/
-Tmp-/TemporaryItems/(A%20Document%20Being%20Saved%20By%20MyApp%203)
/SomeDirectory. 
Here's the error:
Error Domain=NSCocoaErrorDomain Code=4 UserInfo=0x200583a00 
"“SomeDirectory” couldn’t be removed."

【问题讨论】:

  • +1 因为 NSDocument 是一头奇怪的野兽 :)
  • 这很奇怪,但我猜可可在 saveToURL 和 writeToURL 之间做了一些事情。也许它与使保存原子或“安全”有关?我想知道当你覆盖 writeTOURL 时你是否会丢失它?

标签: cocoa macruby


【解决方案1】:

事实证明这很容易解决。

我覆盖了 saveToURL:ofType:forSaveOperation:error: 并根据 SaveOperation 类型进行了 url 和类型交换。

现在一切正常。

【讨论】:

    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多