问题标签 [nsfilecoordinator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
184 浏览

ios - 坐标AccessWithIntents & stopAccessingSecurityScopedResource

我在 startAccessingSecurityScopedResource 之后调用了 coordinateAccessWithIntents。在 byAccessor 块中,我应该在原始 URL 或可能更新的 URL 上调用 stopAccessingSecurityScopedResource 吗?

例如...

我应该在哪个 URL 上调用 stopAccessingSecurityScopedResource?

0 投票
0 回答
170 浏览

objective-c - NSFileVersion:通过复制文件解决冲突

我有整个 Documents 文件夹的 NSFilePresenter。我曾经将文件放在 iCloud 容器中,如果文件在多个设备上同时创建,它们会被 iCloud 自动重命名。同时presentedSubitemAtURL:(didMoveToURL:会通知我在某些设备上创建的某些文件已重命名。这很重要,因为这是我知道 iCloud 自动移动文件的唯一方式。

但是,现在我开始自己解决冲突并实施- (void)presentedSubitemAtURL:(NSURL *)url didGainVersion:(NSFileVersion *)version,因为我并不总是希望 iCloud 简单地重命名文件,有时我想就地编写。

以与 iCloud 相同的方式将同一文件的冲突版本分离到两个文件的正确方法是什么?因此,如果两个设备同时写入file.txt,我希望将其中一个文件移动到file 2.txt.

到目前为止,我有选择最新版本文件的分辨率。

0 投票
0 回答
1073 浏览

swift - Swift fileCoordinator 挂起应用程序

我有以下删除文件的功能(恰好是 iCloud)。有时它有效,有时它挂在 filecoordinate.coordinate 行:

itemIsOpenable 函数检查 iCloud 下载状态如下:

应用挂起时的打印输出如下(不再赘述):

在删除:现有网址:file:///private/var/mobile/Library/Mobile%20Documents/iCloud~net~thesavorys~Notes/Documents/Document%201997293854.note

项目是可打开的下载状态=可选(NSURLUbiquitousItemDownloadingStatusCurrent)下载状态=可选(NSURLUbiquitousItemDownloadingStatusCurrent)IN DELETE:openable:true IN DELETE:尝试文件协调器,可能会卡在这里IN DELETE:文件协调器= NSFileCoordinator:0x17046de40

任何关于这里发生的事情的想法都非常感谢......

谢谢蒂姆

0 投票
0 回答
260 浏览

ios - 使用 NSFileCoordinator 和 DispatchQueue 遵循  指南时,应用程序挂起删除 iCloud 文档

我有一个待办事项列表应用程序,它将文档作为UIDocument对象存储在 iCloud 中。创建表视图控制器中的以下函数以在 iCloud 中本地和远程删除待办事项列表项,在通过滑动执行时挂起应用程序以删除表视图单元格上的手势:

iOS 文档的基于文档的编程指南删除文档部分中指出,删除 iCloud 中的项目应在后台线程中异步执行。所以我封装了NSFileCoordinator带有 GCD 的实例化,但每次执行删除操作后,它都会短暂消失然后重新出现(我可以在 iCloud Drive 中看到这种情况)。所以,基本上,它不会被删除。

我可以成功删除它的唯一方法实际上是遵循指南。我不使用也不像这样 NSFileCoordinator coordinate(writingItemAt:options:error:byAccessor:)在后台线程中异步设置删除操作DispatchQueue global(qos:)

关于我可以做些什么来实现符合  准则的任何指针,同时仍然能够成功执行删除操作?谢谢。

0 投票
0 回答
466 浏览

swift - 在 Swift3 中正确使用 NSFileCoordinator

我正在尝试将我的程序作为沙盒应用程序运行。这是一个拖放式 PDF 转换器。

一切正常,但创建和转换文件效果不佳,因为我把它变成了沙盒应用程序。

我试图用 NSFileCoordinator 做的是:

  1. 创建临时文件
  2. 读取并将临时文件复制/移动到资源路径

我知道我使用 NSFileCoordinator 错误,但我不知道从哪里开始解决这个问题。有人可以帮我解决这个问题吗?

0 投票
0 回答
215 浏览

ios - 下载 UIDocumentPickerController 选择的文件夹中的文件

我正在尝试下载包含在由UIDocumentPickerController. 我将获得的 URLdocumentPicker:DidPickDocumentsAtURLs:NSFileCoordinator.

对于 iCloud Drive 文件提供商提供的文件夹,它在访问块中提供的 URL 显然是一个 .zip 文件,如果最初没有下载foo.icloud文件,则该文件仅包含归档 NSURL 的文件。如何确保在压缩过程之前已下载这些文件?

我是否应该手动取消存档并将它们再次输入到NSFileCoordinator? 还是我需要使用startDownloadingUbiquitousItemAtURL:error:?我认为使用UIDocumentPickerController应该可以让我摆脱所有手动协调逻辑。

我错过了什么?

0 投票
2 回答
3628 浏览

swift - Swift / Cocoa:如何观察文件夹的变化?

我正在编写一个小型 macOS 应用程序,我希望能够在其中查看文件夹的更改。它不需要监视子文件夹,我只想在将文件添加到文件夹或删除文件时收到通知。

它看起来NSFileCoordinator和/或NSFilePresenter可以用来实现这一点,但我无法理解如何使用它们来实现这一点。

理想情况下,无需包含第三方框架即可解决此问题。

0 投票
1 回答
186 浏览

xcode - 尝试使用相关项目在沙盒应用程序中创建备份文件失败

应用沙盒设计指南说:

App Sandbox 的相关项目功能允许您的应用访问与用户选择的文件同名但扩展名不同的文件。此功能由两部分组成:应用程序的 Info.plist 文件中的相关扩展列表和告诉沙箱您在做什么的代码。

我的 Info.plist 定义了文件的文档类型.pnd(用户选择的文件),以及文件的文档类型.bak。文件的条目.bak除其他属性外,还具有属性NSIsRelatedItemType = YES

当用户编写 .pnd 文件的新版本时,我正在尝试使用相关项将现有文件移动到备份文件(将 .pnd 后缀更改为 .bak 后缀)。该应用程序是沙盒的。我不精通沙盒。

PasteurOrgManager用作NSFilePresenter原始文件和备份文件的类:

doBackupOf:方法如下。请注意,它还设置了NSFilePresenter属性:

backupItemWithCoordinationFrom:方法完成繁重的工作,基本上:

但代码并没有那么远。我已经跟踪了代码,并且 URL 变量符合我的预期,并且是合理的。在上面代码中的“此处错误”处,我分配了 File Presenter,我得到:

任何帮助表示赞赏。

(我已经阅读了相关的帖子Where can a sandboxed Mac app save files?以及为什么 NSFilePresenter 协议方法永远不会被调用?。我注意到其他几个似乎与此问题无关的沙盒相关帖子。)

MacBook Pro、MacOS 10.13.5、XCode 版本 9.3 (9E145)

0 投票
0 回答
40 浏览

ios - 如何访问所选文件夹中的所有文件?

用户选择一个包含视频剪辑文件的文件夹,这些文件都是连续的,我的应用程序计划遍历文件夹中的所有文件并将它们组合成一个完整的视频。这通常位于 iCloud、DropBox、box 或其他此类位置。

我正在使用 NSFileCoordinator 和 [NSURL startAccessingSecurityScopedResource] ,这些使文件夹本身可用,但显然不是其中的文件。

有没有办法将文件夹的访问权限扩展到其中的项目?

0 投票
1 回答
198 浏览

cocoa - 如何在不阻塞主线程的情况下禁用 NSApplication/NSWindow 的所有用户交互?

我有一个 Cocoa 应用程序,它向用户显示文件夹结构并允许基本的文件系统操作,例如移动/复制/重命名。

应用截图

我在后台队列上执行所有文件系统访问,并通过NSFileCoordinator.

假设用户将文件“Notes.txt”拖到文件夹“Project B”中。这是我所做的:

  1. 我安排在后台队列上移动文件的文件操作。
  2. 完成后,它会调用主队列上的一个块,我在其中更新大纲视图

假设移动文件的后台操作需要一些时间。我需要防止用户继续移动文件或执行其他操作,直到第一个操作完成。

因此,我想:

  • 禁用所有用户与窗口的交互
  • 禁用大多数菜单项和键盘快捷键
  • 保持某些菜单,例如 [Quit Cmd-Q] 工作
  • 不要阻塞主线程

想到的一种解决方案:使用模态表?.

我不想这样做,因为大多数情况下,操作会很快完成,并且工作表只会显示几分之一秒,这会分散注意力。

如果需要超过 500 毫秒,我会跟踪操作从“交互阻止模式”切换到“模式表”需要多长时间。

问题是:如何在不实际呈现模态表的情况下实现这样的“用户交互阻止模式”?

另一种想法:禁用所有控件

我考虑isEnabled = false过对所有控件进行设置,但这不是一个选项,因为 UI 可以任意复杂,并且不会阻止通过菜单或键盘快捷键进行操作。