问题标签 [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.
ios - iCloud 和鞋盒应用程序:如何自动同步文件包?
我有一个UIDocument
基于 iOS 对应的“Shoebox”Mac 应用程序。
我正在尝试找出通过 iCloud 在 Mac 和 iOS 之间同步数据的最佳策略。
我不能NSDocument
在 Mac 应用程序中采用(它是一个鞋盒应用程序,没有类似于 iTunes 中的专辑的单独文档概念)。
我对 Mac 应用程序的计划是这样的:
- 将每个项目作为文件包存储在“数据”目录中
- 使用文件包装器编写包
- 使用文件协调来同步读/写操作(在文件包的“根”文件夹上同步)
对于 iOS 应用程序:
- 将Mac应用在data目录下创建的文件包加载为
UIDocument
s - 依靠 UIDocument 进行更改通知/文件协调
- 我不会使用该
Documents
文件夹,因为我不希望用户在“设置”应用中看到文档
我的问题:
- 如何确保我的 Mac 文件包以一致的方式同步到 iOS?(即对包中多个文件的更改被原子地视为一次更改)
- 在目录上设置“文件包”位是否足够(我实际上是通过导出 UTI 来做到这一点的)?
- 有没有办法实际模拟/测试这个?
ios - 将 iCloud 文件复制到沙箱
我正在寻找一种更好的方法将一堆文件从我的 iCloud 容器下载到我的沙箱。这是我目前使用的:
以这种方式制作 iCloud 项目的副本有什么问题吗?在生产中,我有一些用户抱怨他们的所有文件都没有下载。改用会更好NSFileManager's startDownloadingUbiquitousItemAtURL:error
吗?如果是这样,为什么?谢谢。
ios - 在 Today 扩展中加载文件
我一直在尝试创建一个需要访问.plist
文档目录中文件的 Today 扩展。我已经为应用程序和扩展程序设置了应用程序组。
虽然我已经看到了 的示例NSUserDefaults
,但我找不到任何用于访问文件的内容。
我尝试像这样访问文件(在应用程序本身中工作)
但是我在控制台中收到以下错误消息:
该文档说明了有关使用NSFileCoordinator
and的内容NSFilePresenter
。我不知道如何使用它们。我确定我需要在某处告诉他们应用程序组标识符,但我不知道在哪里。
ios - 如何在 iOS 应用程序主页中创建文件夹
是否有任何教程来解释 iOS 应用程序中的文件夹创建?
在我的应用程序中有一个主页包含不同类型的文档。我想根据文档类型在文件夹中排列文档。有人可以帮忙吗?
ios - 在应用扩展和容器应用之间共享数据
我正在尝试在应用扩展程序和我的容器应用程序之间共享数据。我在容器应用程序中设置了一个应用程序组,并在我的应用程序扩展中引用了它。
当我的应用程序扩展被访问时,我将一个对象保存到 NSUserDefaults
在容器应用程序中 - 当它启动时,我设置了一个观察者:
但是,如果我的容器应用程序被发送到后台,则永远不会调用此通知 - 所以我无法知道用户默认值何时更改。
如何获取容器应用程序中的信息(为了在内部更新)?
ios - 如何在 UIDocument 中实现文件协调
我已经实现了 UIDocument 功能(contentsForType:error:
, SaveToURL:forSaveOperation:completionHandler:
, loadFromContents:ofType:error:
)来在 iCloud 中存储简单的文本文件。
如何实现文件协调?有什么优势?我是否需要对以前的代码进行更改以进行读/写操作?
谢谢!
objective-c - 跟踪外部文件内容更改
我已经完全实现了用于跟踪对导入的文件夹/文件树所做的外部更改的NSFilePresenter
协议。NSFileCoordinator
它通常有效。
但是,我仍然有点困惑。
- 我已经实现了协议的几乎所有(如果不是全部)功能。
presentedSubitemDidChangeAtURL:
,presentedSubitemAtURL:didMoveToURL:
并且presentedItemDidChange
是唯一被调用的- 我能够成功跟踪正在添加的新文件夹或移动的文件。但是,当要跟踪文件内容更改(由另一个应用程序编辑和保存)时,事情会变得有点复杂:要调用的方法是
presentedItemDidChange
(在其他情况下显然也会调用)
我错过了什么?
不应该presentedItemDidGainVersion:
或被savePresentedItemChangesWithCompletionHandler:
调用吗?
任何帮助或指示都非常受欢迎!:)
objective-c - NSFileCoordinator 的长时间延迟 coordinateWritingItemAtURL
我正在设置NSFileCoordinator
并NSFilePresenter
在我的应用程序中,因此我可以安全地从我的 AppleWatch 应用程序执行文件 IO。在我的代码中有一些地方我会快速连续多次写入文件。这本身就是一个问题,我正在努力纠正它,但我注意到这个过程中有一些奇怪的行为。
我这样包装我的文章:
在第一次写入时,写入块发生在 1 ms 内。coordinateWritingItemAtURL
但在那之后,调用和执行写入块之间大约有 0.5 秒的延迟。
这是预期的行为吗?
一些文档说用于批处理操作NSFileCoordinator
,但是当我不批处理时得到这么长时间的延迟似乎很奇怪。NSFilePresenter
prepareForReadingItemsAtURLs:writingItemsAtURLs:options:error:byAccessor:
更新:阅读也会发生这种情况。
更新 2: 这是一个重现问题的示例项目。
ios - 无法使用 NSFileCoordinator 删除 UIManagedDocument
我已经修改了 Apple 的 Lister 示例以使用UIManagedDocument
而不是UIDocument
. 除了删除文档外,一切正常。当我尝试在ListUtilites.swiftremoveListAtURL
中的方法中使用 Apple 的代码删除文档时,我在列出的文档消失后收到此错误消息,然后重新出现在模拟器中:NSFileCoordinator
“不能两次添加同一个商店”错误对我来说没有任何意义,因为我正在删除文件。也许我需要先关闭文件?该文件是本地的,而不是在 iCloud 中,所以我认为我不需要删除任何事务日志。此外,当我删除NSFileCoordinator
代码时,它只适用于用户NSFileManager
,它适用于本地文件,但对于 iCloud 文件我得到同样的错误。
objective-c - NSDocument 呈现的ItemDidChange 每秒调用一次
我正在研究一个NSDocument
子类。它表示文本编辑器中的文本文件。
我正在尝试使用该NSFilePresenter
协议来响应其他应用程序所做的更改(即,如果用户在 TextEdit 中保存更改而同一文件在此处打开)。
我目前的实现是这样工作的……</p>
我为文件协调器添加了一个属性:
我懒惰地创建它:
当presentedItemDidChange
被调用时,我从磁盘重新加载文件并显示它:
此代码有效:当我在 TextEdit 中保存文件时,更改会出现在我的应用程序中。
但是,一旦我保存了这个文件,presentedItemDidChange
就会重复调用(大约每秒一次)。几分钟后,应用程序由于内存错误而崩溃。没有记录错误;控制台看起来基本上是这样的:
这是我第一次使用这些 API,所以我认为我犯了一个简单的错误。如果重要的话,我正在运行 OS X 10.11.3 和 Xcode 7.2。我究竟做错了什么?