问题标签 [nsfilepresenter]

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 投票
3 回答
1722 浏览

macos - 为什么 NSFilePresenter 协议方法永远不会被调用?

我正在尝试监视本地和 iCloud 目录中的文件更改,并实现了 NSFilePresenter 协议方法,但唯一被调用的方法是presentedItemAtURL.

我是否正确假设我应该能够监视本地或 iCloud 目录并在任何进程添加、修改或删除目录中的文件时收到通知。

这是 OS X 应用程序的基本代码:

0 投票
0 回答
152 浏览

objective-c - 跟踪外部文件内容更改

我已经完全实现了用于跟踪对导入的文件夹/文件树所做的外部更改的NSFilePresenter协议。NSFileCoordinator它通常有效。

但是,我仍然有点困惑。

  • 我已经实现了协议的几乎所有(如果不是全部)功能。
  • presentedSubitemDidChangeAtURL:presentedSubitemAtURL:didMoveToURL:并且presentedItemDidChange是唯一被调用的
  • 我能够成功跟踪正在添加的新文件夹或移动的文件。但是,当要跟踪文件内容更改(由另一个应用程序编辑和保存)时,事情会变得有点复杂:要调用的方法是presentedItemDidChange(在其他情况下显然也会调用)

我错过了什么?

不应该presentedItemDidGainVersion:或被savePresentedItemChangesWithCompletionHandler:调用吗?

任何帮助或指示都非常受欢迎!:)

0 投票
2 回答
1247 浏览

objective-c - NSFileCoordinator 的长时间延迟 coordinateWritingItemAtURL

我正在设置NSFileCoordinatorNSFilePresenter在我的应用程序中,因此我可以安全地从我的 AppleWatch 应用程序执行文件 IO。在我的代码中有一些地方我会快速连续多次写入文件。这本身就是一个问题,我正在努力纠正它,但我注意到这个过程中有一些奇怪的行为。

我这样包装我的文章:

在第一次写入时,写入块发生在 1 ms 内。coordinateWritingItemAtURL但在那之后,调用和执行写入块之间大约有 0.5 秒的延迟。

这是预期的行为吗?

一些文档说用于批处理操作NSFileCoordinator,但是当我不批处理时得到这么长时间的延迟似乎很奇怪。NSFilePresenterprepareForReadingItemsAtURLs:writingItemsAtURLs:options:error:byAccessor:

更新:阅读也会发生这种情况。

更新 2: 是一个重现问题的示例项目。

更新 3:使用此 API 在应用程序及其扩展之间进行协调显然是个 主意。但问题仍然存在。

0 投票
0 回答
466 浏览

swift - 在 Swift3 中正确使用 NSFileCoordinator

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

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

我试图用 NSFileCoordinator 做的是:

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

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

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 回答
262 浏览

icloud - iOS 14:NSFilePresenter 没有收到回调/通知;适用于iOS13

我有一个采用 NSFilePresenter 协议的 UIViewController。我已经实现了presentedItemDidChange() 以便接收存储在iCloud 上无处不在的容器中的文件的更改。我的实现在 iOS13.7 上运行良好,但在 iOS 14 上失败。

当我从 macOS 上的“Finder”之类的外部进程修改呈现的文件时,不会调用 presentItemDidChange()。

如果这是 iOS 14 中的一个已知错误,还是我在实现中遗漏了什么?

我的实现大致是这样的:

谢谢