问题标签 [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 投票
1 回答
749 浏览

ios - iCloud 和鞋盒应用程序:如何自动同步文件包?

我有一个UIDocument基于 iOS 对应的“Shoebox”Mac 应用程序。

我正在尝试找出通过 iCloud 在 Mac 和 iOS 之间同步数据的最佳策略。

我不能NSDocument在 Mac 应用程序中采用(它是一个鞋盒应用程序,没有类似于 iTunes 中的专辑的单独文档概念)。

我对 Mac 应用程序的计划是这样的:

  • 将每个项目作为文件包存储在“数据”目录中
  • 使用文件包装器编写包
  • 使用文件协调来同步读/写操作(在文件包的“根”文件夹上同步)

对于 iOS 应用程序:

  • 将Mac应用在data目录下创建的文件包加载为UIDocuments
  • 依靠 UIDocument 进行更改通知/文件协调
  • 我不会使用该Documents文件夹,因为我不希望用户在“设置”应用中看到文档

我的问题:

  • 如何确保我的 Mac 文件包以一致的方式同步到 iOS?(即对包中多个文件的更改被原子地视为一次更改)
  • 在目录上设置“文件包”位是否足够(我实际上是通过导出 UTI 来做到这一点的)?
  • 有没有办法实际模拟/测试这个?
0 投票
3 回答
2653 浏览

ios - 将 iCloud 文件复制到沙箱

我正在寻找一种更好的方法将一堆文件从我的 iCloud 容器下载到我的沙箱。这是我目前使用的:

以这种方式制作 iCloud 项目的副本有什么问题吗?在生产中,我有一些用户抱怨他们的所有文件都没有下载。改用会更好NSFileManager's startDownloadingUbiquitousItemAtURL:error吗?如果是这样,为什么?谢谢。

0 投票
1 回答
3582 浏览

ios - 在 Today 扩展中加载文件

我一直在尝试创建一个需要访问.plist文档目录中文件的 Today 扩展。我已经为应用程序和扩展程序设置了应用程序组。

虽然我已经看到了 的示例NSUserDefaults,但我找不到任何用于访问文件的内容。

我尝试像这样访问文件(在应用程序本身中工作)

但是我在控制台中收到以下错误消息:

该文档说明了有关使用NSFileCoordinatorand的内容NSFilePresenter。我不知道如何使用它们。我确定我需要在某处告诉他们应用程序组标识符,但我不知道在哪里。

0 投票
1 回答
154 浏览

ios - 如何在 iOS 应用程序主页中创建文件夹

是否有任何教程来解释 iOS 应用程序中的文件夹创建?

在我的应用程序中有一个主页包含不同类型的文档。我想根据文档类型在文件夹中排列文档。有人可以帮忙吗?

0 投票
1 回答
1139 浏览

ios - 在应用扩展和容器应用之间共享数据

我正在尝试在应用扩展程序和我的容器应用程序之间共享数据。我在容器应用程序中设置了一个应用程序组,并在我的应用程序扩展中引用了它。

当我的应用程序扩展被访问时,我将一个对象保存到 NSUserDefaults

在容器应用程序中 - 当它启动时,我设置了一个观察者:

但是,如果我的容器应用程序被发送到后台,则永远不会调用此通知 - 所以我无法知道用户默认值何时更改。

如何获取容器应用程序中的信息(为了在内部更新)?

0 投票
1 回答
316 浏览

ios - 如何在 UIDocument 中实现文件协调

我已经实现了 UIDocument 功能(contentsForType:error:, SaveToURL:forSaveOperation:completionHandler:, loadFromContents:ofType:error:)来在 iCloud 中存储简单的文本文件。

如何实现文件协调?有什么优势?我是否需要对以前的代码进行更改以进行读/写操作?

谢谢!

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 投票
1 回答
155 浏览

ios - 无法使用 NSFileCoordinator 删除 UIManagedDocument

我已经修改了 Apple 的 Lister 示例以使用UIManagedDocument而不是UIDocument. 除了删除文档外,一切正常。当我尝试在ListUtilites.swiftremoveListAtURL中的方法中使用 Apple 的代码删除文档时,我在列出的文档消失后收到此错误消息,然后重新出现在模拟器中:NSFileCoordinator

“不能两次添加同一个商店”错误对我来说没有任何意义,因为我正在删除文件。也许我需要先关闭文件?该文件是本地的,而不是在 iCloud 中,所以我认为我不需要删除任何事务日志。此外,当我删除NSFileCoordinator代码时,它只适用于用户NSFileManager,它适用于本地文件,但对于 iCloud 文件我得到同样的错误。

0 投票
2 回答
684 浏览

objective-c - NSDocument 呈现的ItemDidChange 每秒调用一次

我正在研究一个NSDocument子类。它表示文本编辑器中的文本文件。

我正在尝试使用NSFilePresenter协议来响应其他应用程序所做的更改(即,如果用户在 TextEdit 中保存更改而同一文件在此处打开)。

我目前的实现是这样工作的……</p>

我为文件协调器添加了一个属性:

我懒惰地创建它:

presentedItemDidChange被调用时,我从磁盘重新加载文件并显示它:

此代码有效:当我在 TextEdit 中保存文件时,更改会出现在我的应用程序中。

但是,一旦我保存了这个文件,presentedItemDidChange就会重复调用(大约每秒一次)。几分钟后,应用程序由于内存错误而崩溃。没有记录错误;控制台看起来基本上是这样的:

这是我第一次使用这些 API,所以我认为我犯了一个简单的错误。如果重要的话,我正在运行 OS X 10.11.3 和 Xcode 7.2。我究竟做错了什么?