问题标签 [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 回答
656 浏览

iphone - NSFileCoordinator 泄漏

这是与块相关的内存管理的一个微不足道的问题,我不确定fc应该在何时/何地释放

我认为在 (1) 发布就可以了(没有泄漏),但这真的是标准的做事方式吗?(释放同一对象调用的块中的对象??)。我觉得这里有些奇怪。

在 (2) 处,也可以,但只是因为访问器块是同步调用的。

出于学习目的......如果访问器块将被异步调用怎么办?(NSFileCoordinator 不需要的假想情况)在这种情况下,我需要制作fc一个 ivar 还是作为第一种方法就可以了?

任何帮助表示赞赏

:)

0 投票
5 回答
1584 浏览

ios - 在 iOS 5.0 模拟器中使用 UIManagedDocument 时出现 NSFileCoordinator 错误

我在 iOS 5.0 中使用 UIManagedDocument,在模拟器上运行应用程序,在 OSX 10.6 下使用 XCode 4.2。有问题的代码如下所示:

运行标记的行会在日志中创建以下消息:

发送消息后,UIManagedDocument 可能工作也可能不工作——我还没有找到决定这一点的情况。

我很确定代码是正确的,因为它实际上是斯坦福 CS193p 课程中的代码示例之一。整个示例可以在他们的网站上下载 http://www.stanford.edu/class/cs193p/cgi-bin/drupal/ 直接链接到代码: http: //www.stanford.edu/class/cs193p/ cgi-bin/drupal/system/files/sample_code/Photomania_0.zip

此外,代码在设备本身上运行良好,不会产生“令人惊讶”的消息,并且运行之后的所有代码都很好。

我在谷歌上没有找到任何东西,在 Apple 开发者页面上也没有。重新启动模拟器或 XCode,或重新安装它们都不会改变行为。

有任何想法吗?

0 投票
1 回答
415 浏览

objective-c - iCloud NSFileManager API - 游戏分数存储

我目前有一个 iOS 应用程序,我想为其启用 iCloud 分数存储,以便用户可以在他们的设备上同步他们的游戏进度。用户进度存储在沙箱文档文件夹中的多个 plist 文件中。我在网上阅读了几篇关于 iCloud 和各种“帮助程序类”(NSFileManager、UIDocument、NSFileCoordinator 等)的文章,但我有点困惑哪一个适合我(NSFileManager 能完成这项工作还是我需要继承 UIDocument )。

API 让我有点困惑。

0 投票
1 回答
967 浏览

ios - 验证 iCloud 容器上的文档是否存在

我正在使用 NSMetadataQuery 来检测我的应用程序 iCloud 容器中是否存在文档,即使该文件尚未在本地下载也是如此。

带有 NSFilePresenter 的 NSFileCoordinator 可以做同样的事情吗?验证文件是否存在,即使它在本地仍然不可用?

更新:我已经使用了一段时间 NSMetadataQuery 来检测文件是否存在于我的 ubiquity 容器中。但至少在 10.8.2 上测试,它并不总是有效。对于文件的存在,我收到了很多误报。

我知道其他人一直在使用我相信文件协调员。有没有人对此有任何意见,或者更好地指出我如何使用它们的例子?

0 投票
1 回答
3051 浏览

cocoa - NSFileCoordinator 正确用法

使用 NSFileCoordinator 编写文件时,我需要指定正确的 NSFileCoordinatorWritingOptions。尽管对它们进行了详细说明,但我不确定何时使用哪一个。可用的选项有:

  • NSFileCoordinatorWritingForDeleting
  • NSFileCoordinatorWritingForReplace
  • NSFileCoordinatorWritingForMoving
  • NSFileCoordinatorWritingForMerging

例如,如果我想创建一个文件(例如 plist),哪个选项是正确的?当我修改文件时,哪个?

有人可以解释 NSFileCoordinatorWritingOptions 以便更好地理解吗?

0 投票
2 回答
1750 浏览

objective-c - NSFilePresenter -presentedSubitemDidAppearAtURL:方法永远不会被调用

我有一个符合 NSFilePresenter 协议的对象,它代表我的基于文档的应用程序文档包。当在包内创建新文件时,以编程方式使用具有适当 NSFileCoordination 方法的 NSFileManager 或通过 Finder 我只得到-presentedSubitemDidChangeAtURL:事件,但在这种情况下似乎并不那么明显-presentedSubitemDidAppearAtURL:

这是预期的行为还是我做错了什么?

-presentedSubitemDidAppearAtURL:NSFilePresenter 中的评论清楚地表明:

通知该目录包含的文件或目录已添加。如果这个方法没有实现但是-presentedItemDidChange已经实现了,并且目录实际上是一个文件包,那么文件协调机制将被调用-presentedItemDidChange

0 投票
2 回答
1891 浏览

ios - 重命名 iCloud 文档

问题

到目前为止,我所拥有的是创建新本地文件并删除 iCloud 文件的代码。

是否可以重命名 iCloud 文档以使其保留在 iCloud 中?

GarageBand 可以做到。可以重命名 iCloud 歌曲。重命名完成后,歌曲仍在 iCloud 中。但是 GarageBand 是 Apple 应用程序,因此它可能使用私有 api。

我当前的代码:

更新:仍然没有运气

我发现-setUbiquitous:itemAtURL:destinationURL:error:不能用于重命名文档。

如果我在已经本地的文件上调用 [setUbiquitous:NO itemAtURL:oldLocalURL destinationURL:newLocalURL error:&error],则:

错误域=NSCocoaErrorDomain 代码=512“操作无法完成。(Cocoa 错误 512。)”UserInfo=0x1fdf6730 {NSURL=file://localhost/var/mobile/Applications/4BABA000-B100-49FC-B928-B0F403FC75FF /Documents/LocalDrawing.td2/, NSUnderlyingError=0x20940e80 “操作无法完成。(LibrarianErrorDomain 错误 2 - 无法在未同步的项目上禁用同步。)”}

如果我在已经云文件上调用 [setUbiquitous:YES itemAtURL:oldCloudURL destinationURL:newCloudURL error:&error],则:

错误域=NSCocoaErrorDomain 代码=512“操作无法完成。(Cocoa 错误 512。)”UserInfo=0x208e9820 {NSURL=file://localhost/var/mobile/Library/Mobile%20Documents/22DR89XVRF~com~opcoders ~triangle-draw/Documents/CloudDrawing.td2/, NSUnderlyingError=0x208d45b0 “操作无法完成。(LibrarianErrorDomain 错误 2 - 无法在同步项目上启用同步。)”}

因此-setUbiquitous:itemAtURL:destinationURL:error:不能用于重命名文档。

0 投票
0 回答
1456 浏览

ios - NSFileCoordinator 在沙盒 Mac App Store 应用程序中正确使用 sqlite 日志文件

由于 sqlite 执行事务的方式(使用 wal 或日志文件),我在将我的 sqlite 代码移植到 App Store 时遇到了很多麻烦。Apple文档的相关部分是:

您的应用需要能够打开或保存多个具有相同名称和不同扩展名的相关文件(例如,自动打开与电影文件同名的字幕文件,或允许 SQLite 日志文件)。要访问该辅助文件,请创建一个符合 NSFilePresenter 协议的类。该对象应提供主文件的 URL 作为其 primaryPresentedItemURL 属性,并应提供辅助文件的 URL 作为其presentedItemURL 属性。用户打开主文件后,你的文件展示器对象应该调用 NSFileCoordinator 类的 addFilePresenter: 类方法来注册自己。

Apple DTS 为我提供了以下代码:

其中 SQLiteRelatedItemPresenter 是:

这个特定的示例适用于所有在 openSQLiteFileAtURL 方法中执行的 sqlite 操作。如果我尝试将逻辑划分为子方法,我会遇到很多麻烦,例如:

似乎 addPresentersForURL 应该只被调用一次(在 openSQLiteFileAtURL 中),但由于沙盒权限错误,我无法拥有一个正常工作的应用程序......有什么帮助吗?

0 投票
2 回答
2449 浏览

objective-c - NSFilePresenter 方法永远不会被调用

我正在尝试编写一个简单的(玩具)程序,该程序使用 NSFilePresenter 和 NSFileCoordinator 方法来监视文件的更改。

该程序由一个加载(硬编码)文本文件的文本视图和一个按钮组成,该按钮将保存文件的任何更改。这个想法是我有两个实例正在运行并且保存在一个实例中会导致另一个实例重新加载更改的文件。

加载和保存文件工作正常,但从未调用 NSFilePresenter 方法。它完全基于一个名为 FileManager 的类,它实现了 NSFilePresenter 协议。代码如下:

界面:

执行:

applicationDidFinishLaunching请注意,每次单击保存按钮时都会调用reloadFile并调用 saveFile (通过应用程序委托)。

唯一被调用(通过日志)的 NSFilePresenter 方法是 presentItemURL (当程序启动并加载文件时调用四次,单击保存时调用三次。在第二个实例中单击保存对第一个例子。

谁能告诉我我在这里做错了什么?

0 投票
2 回答
966 浏览

objective-c - OSX related file creation

I'm trying to build an application that easily converts from one file format to another. The idea is you drag the source file onto the dock tile and the output file is created alongside the source file (in the same directory.)

After reading the documentation, I have everything setup correctly -- I think... but it doesn't work.

My Info.plist contains the following:

If I'm reading the documentation correctly, this should allow my app to accept files of my_src_type via drag and drop and output files of my_dest_type in the same directory as the input file, provided of course that I let the sandbox know about it.

To that end, I have a SimpleFilePresenter that looks like this:

As soon as I use addFilePresenter: to request permission to create my output file, I get the following error in the Console.