问题标签 [nsfilewrapper]

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

macos - NSFileWrapper 是否支持延迟加载?

我正在创建一个NSDocument可能包含数百个大文件的包,因此我不想在打开文档时全部阅读。

我花了一些时间搜索,但我找不到明确的答案。大多数人似乎认为NSFileWrapper将所有数据加载到内存中,但有些人表示它不会加载数据,直到您调用-regularFileContents包装器。(参见NSFileWrapper 将所有内容加载到内存中吗?Objective-C / Cocoa:上传图像、工作内存和存储示例。)

文档并不完全清楚,但类似的选项NSFileWrapperReadingImmediate似乎NSFileWrapperReadingWithoutMapping表明它并不总是阅读所有内容。

我收集NSFileWrapper支持增量保存,只写出已被替换的子包装器。所以如果它也支持增量加载就好了。

有确定的答案吗?

0 投票
1 回答
262 浏览

ios - NSFileWrapper 包是否类似于 Mac OS X 包 (pkg)?

在许多地方,Apple 文档都谈到了由 NSFileWrapper 创建的文件包(例如,用于 iCloud)。这是否类似于用于在 OS X 平台上将文件夹隐藏为单个文件的 .pkg 格式?

我有一个包含多个文本文件的应用程序,我希望能够让用户备份。我已经使用 NSFileWrapper 创建了一个执行此操作的“文件”。我曾认为这类似于 OS X 上的 .pkg 文件,但尽管随后将文件带入 OS X(通过电子邮件),但我无法打开它 - 尽管重命名文件等。

那么,NSFileWrapper 的“包”与 OS X 的“包”完全不同吗?

谢谢,理查德

0 投票
1 回答
541 浏览

ios - UIDocument loadFromContents 应该返回一个 NSFileWrapper;而是返回 NSConcreteData

我正在制作一个文本编辑器应用程序,将其每个文档存储为 NSFileWrapper 目录,文档文本和文档标题作为目录中的单独文件。我希望contents部分loadFromContents: (id) contents是 NSFileWrapper,但事实并非如此。我的代码如下(它属于 UIDocument 的子类):

当我尝试调用此方法时,出现此错误:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSConcreteData fileWrappers]:无法识别的选择器发送到实例 0x9367150”

contentsForType:如果有帮助,以下是我的功能:

谢谢!

0 投票
1 回答
318 浏览

objective-c - 适用于 OS X 的 iFinBox 和 iExplorer 等实用程序

我想为 Mac OS X 制作一个像iFunBoxiExplorer这样的实用程序应用程序,我可以在其中检索连接设备的信息和文件并显示它。

虽然我在 iPhone 开发方面有很好的经验,但我从来没有为 mac 开发过任何东西。谁能给我一个好的起点,我可以从哪里开始。

谢谢

0 投票
1 回答
130 浏览

objective-c - NSDocument 和 NSFileWrapping 保存坏名

我的 NSDocument 子类使用捆绑文档类型,它使用 fileWrapperOfType:error: 将数据写入磁盘。这完美地工作,但最终它将开始保存具有乱码名称的文件,例如“2_ #$!@%!# _info.plist”,而不是覆盖正确的文件。

我不知道导致问题的更改是什么,但我认为它与权限相关,因为即使“stat”返回所有者可写的“drwxr-xr-x”,Finder 也不允许我在包中写入。

NSFileWrapper 或 NSDocument 是否弄乱了权限或什么?我是这个 API 的新手,但这是我在下面使用的代码(在 Objective Pascal 中),希望所有人都能阅读。

0 投票
3 回答
2346 浏览

objective-c - NSFileWrapper,懒加载和保存

我有一个基于 NSDocument 的应用程序,它使用文件包装器来保存和加载其数据。文档可以有各种资源,所以我不想把所有的东西都加载到内存中。我可能做错了什么,但是一旦我更改了一个(内部)文件然后保存,我就无法读取任何尚未加载到内存中的文件。

我已将相关代码分离到一个单独的项目中以重现此行为,并且得到相同的结果。基本流程是这样的:

  • 我从磁盘加载现有文档。主文件包装器是一个目录文件包装器(我称之为main),其中包含两个其他文件包装器(sub1sub2)。此时未加载两个内部文件包装器。
  • 当用户想要编辑sub1时,它是从磁盘加载的。
  • 用户保存文档
  • 如果用户想要编辑另一个文件 ( sub2 ),则无法加载。出现的错误:

    /li>

这是我项目中的相关代码:

这段代码在这个要点中可能更容易阅读: https ://gist.github.com/bob-codingdutchmen/6869871

底部的两种方法仅用于更新 UI,因此我可以看到会发生什么。

  • 要更改文件的内容,我删除现有的 fileWrapper 并添加一个新的。这是我发现更改文件内容的唯一方法,也是我在其他 SO 答案中看到的方法。

  • 当从磁盘加载文档时,我保留了 fileWrapper 以便我可以使用它(在上面的代码中称为myWrapper

Apple 文档说 NSFileWrapper 支持延迟加载和增量保存,所以我假设我的代码有一些我看不到的基本缺陷。

0 投票
1 回答
131 浏览

nsbundle - NSDocument 类文件包没有版权

我创建了一个NSDocument基础应用程序,它提供了一个自定义文件格式,它是一个包含多个资源的包......一切正常,我可以保存、加载、显示包内容等......

问题是,当我想通过 Internet 发送它时,比如使用 gmail 或 Dropbox……文件缩小(从 KB 到字节)并且没有说明我的应用程序的名称,也没有“显示包内容有效”

MIME 应用程序/x 目录;字符集=二进制

0 投票
1 回答
528 浏览

ios - 将 UIDocument 类的包文件移动到 iCloud

我正在编写一个应用程序,它可以在本地和 iCloud 上保存和加载文档。本地工作正常,但我遇到了 iCloud 问题。

文档保存为一个包 - UIDocument 读取和写入一个包含图像文件、缩略图文件和信息 plist 的 NSFileWrapper。当我将文档保存到 iCloud,然后查看“管理存储”下的文件时,我看到的是单个文件而不是包;更重要的是,当我使用 NSMetadataQuery 搜索文件时,它会为每个单独的文件而不是包返回一个 NSMetadataItem。结果,我的应用程序没有意识到要加载任何包,而且 iCloud 毫无用处。

我认为如果我设置了文档类型并正确导出了 UTI,那么这些包就会得到正确处理。对吗?如果是这样,将文档类型设置为包的清单是什么?

0 投票
1 回答
244 浏览

cocoa - NSDocument 和 NSFileWrapper:减少内存占用的策略?

0 投票
1 回答
682 浏览

macos - NSFileWrapper writeToURL:失败并出现错误“文件已存在” - 如何简单地覆盖现有文件?

我试图找出使用NSFileWrapper.

当我保存文件包装器时,我不使用原子写入并提交先前内容的 URL。

但是,第二次写入总是失败并出现错误:“Code=516”文件“test.package”无法保存在文件夹“tempfolder”中,因为已经存在同名文件。”

当然该文件第二次存在,因为我第二次保存它。我期望的是保存成功而无需实际写出任何内容,因为内容没有改变。

上面的代码在我使用 flag 时有效NSFileWrapperWritingAtomic,但这会首先将整个内容写入临时文件,这是我想避免的。即使写入文件使用硬链接,文件包内的目录也会更改,这会导致其他副作用(iCloud 报告更改,尽管实际上没有文件更改,只有目录 inode)。

难道没有某种标志可以让文件包装器简单地以非原子方式覆盖现有文件吗?