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

appkit - 为什么将文件保存到 NSDocument 会创建名称中带有奇怪字符的同一文件的版本?

我正在开发一个基于 NSDocument 的应用程序,其文档类型是包含一堆文件的包包。我这样保存它:

换句话说,在包中,创建一个文件夹“default”,并将“someFile.ext”和一些内容一起保存到其中。

现在,问题。当我查看磁盘上实际保存的内容时,我看到:

截屏

每次我保存文件时,NSDocument 包装器似乎都会创建资源的一些版本化副本。我不想要版本化的克隆,我只想要具有最新内容的原版文件。

版本化资源从何而来?这里发生了什么?有我应该阅读的文档吗?

0 投票
0 回答
639 浏览

objective-c - 如何更新 NSFileWrapper?

我有NSFileWrapper一些内容。我想保存它 ( writeToURL...:),向它添加新内容并再次保存它

我想避免一次又一次地写相同的文件。所以,如果我理解清楚,这意味着该选项NSFileWrapperWritingAtomic不适合我。特别是当我在方法中保存文件包装器时

(的OSX类似物UIManagedDocument

正如Apple所说“不要在覆盖-[NSDocument writeToURL:ofType:error:]”时使用此选项。

所以,我不使用这个选项,但是从文件包装器更新文件(我的意思是:再次保存)失败(见下文)。任何想法/线索?


这是我所做的:

1

我第一次保存它

它运作良好。

我的文件包装器是

2

我用相同的命令保存了第二次。我得到错误

给定的名称实际上是“attached_files”。

3

如果我使用 option NSFileWrapperWritingWithNameUpdating,我仍然会得到同样的错误。

4

如果我使用 option NSFileWrapperWritingAtomic,我不会收到错误消息。

0 投票
1 回答
93 浏览

macos - 文件包的内容不会刷新:为什么?

有谁知道这个问题?

我正在写一个文件包(使用 的方法NSDocument),通过

当我查看文件包的内容时,它没有更新:新文件不会出现,旧文件仍然存在。如果我尝试打开一个旧文件(应该不再在这里),我会收到一条错误消息(在 中Finder):“找不到...”

问题是什么:

  • 我玩错了NSFileWrapper吗?

  • 更新包中“隐藏”文件的信息是否有问题?


编辑

  • 我写的时候没有error

  • 我没有使用NSDocument方法,因为我需要 Core Data 的支持。我使用一个名为BSManagedDocumentsubclasses的类NSDocument

  • 一个可能相关的问题是,当我不使用该NSFileWrapperWritingAtomic选项时,我收到一个错误“无法写入,因为名为 ... 的文件(我的目录!!!)已经存在”

0 投票
0 回答
314 浏览

ios - 由于内存不足,带有许多小文件的 UIDocument 和 NSFileWrapper 崩溃

我有一个UIDocument包含许多小文件(大约 3200 个文本文件)的文件包的自定义。文档的总大小只有 ~600KB,但由于内存不足,每次尝试打开文档时我的应用程序都会崩溃。

我将其追踪到 UIDocument 尝试将文件夹映射到NSFileWrapper.

该文档显示在一个表格中,因此我最多只需要一次从文件包中加载 20 个文件。

有没有办法只“部分”加载一个NSFileWrapper或其他形式的延迟加载(我不是在谈论内存映射,因为问题是关于许多小文件)?

0 投票
1 回答
273 浏览

cocoa - NSFileWrapper 和普通的旧文件句柄

我们正在将一个包含大量跨平台代码的应用程序移植到 Cocoa。必须使用直接处理磁盘上文件以进行加载/保存的低级文件处理例程。

由于NSFileWrapper它旨在通过并抽象出实际的磁盘文件详细信息来呈现内存中文件的内容,NSData因此我们不能直接使用它,对吗?

所以能够使用我们的低级文件处理代码

  • fopen()
  • fread()

和我们正在考虑的类似 ANSI-C 的东西

  1. 使用NSFileWrapperAPI NSDocument
  2. 将文件包装器中的写NSData回临时文件。文件夹
    (例如~/Library/Caches/
  3. 交出那个温度。文件 ( ~100k .. 1MB ) 到较低级别。

文件的写入也可以类似地工作——反之亦然。

现在 - 这种方法是直接访问代表文件的最简单方法NSFileWrapper吗?我们是否忽略了文件包装器中的一些 API?

我们会遇到什么麻烦——特别是考虑沙盒和 iCloud..?

由于我们希望支持包含 1 个以上文件的文件包,因此我们希望坚持使用基于文件包装器的 API,NSDocument而不是使用NSURL基于方法的方法。

任何反馈/批评表示赞赏!

0 投票
1 回答
570 浏览

cocoa-touch - 使用 NSFileWrapper 写入与使用 NSFileManager 复制

有没有区别

(特别是,取决于选项的值;这里的选项的最佳选择是什么?)?

我问这个问题是为了更好地理解 NSFileWrapper。我看到我可以在我的代码中选择使用其中一个。我想答案可能涉及对“硬链接”的考虑。

PS:我想在后台使用这些方法中的任何一种。

0 投票
1 回答
612 浏览

ios - UIDocument 是具有元数据的大型文档的合适策略吗?

我正在研究使用UIDocumentenNSFileWrapper来存储包含相当多的大型视频文件和一些小型文本文件的“项目”。我遇到了一些问题,我开始怀疑 UIDocument 是否仍然是正确的策略。

表现

据我所知, NSFileWrapper 将所有内容加载到内存中。在处理大型视频文件时,这可能是一个问题。我认为可以通过使用放弃标准的自定义保存和加载方法来解决这个问题NSFileWrapper

元数据

我想显示所有文档的列表以及一些元数据。例如,这可以包括预览图像、记录的场景数量、视频长度等。现在获取此数据的唯一方法是打开每个文档并检索它。可能很慢,尤其是对于大型文档。

解决方案?

我现在看到了两种解决方案:完全放弃 UIDocument 并采用自定义架构,或者使用某种集中式元数据文件。后者的缺点是我必须在两个不同的地方管理元数据,并且我需要手动保持它们同步。

UIDocument 仍然是这里的方法吗?如果是这样:有什么方法可以解决这些问题?

0 投票
0 回答
265 浏览

cocoa - 在 Swift 中继承 NSFileWrapper 时出错

我已经NSFileWrapper为我自己的文件包装器进行了子类化,同时保留了它NSFileWrapper提供的文件处理功能。

我没有覆盖任何东西,也没有NSFileWrapper在我的子类中实现任何 ' 初始化程序。相反,我为我的文件包装器提供了我自己的初始化程序。

在初始化程序中,我使用过

并试图做documentation = self.fileWrappers["Documentation"] as NSFileWrapperwheredocumentation是我的子类中的一个NSFileWrapper属性。但是执行在这一步停止说

我不明白我做错了什么。NSFileWrapper 不应该被子类化吗?为什么它首先在子类中寻找初始化器?

编辑:我的初始化程序是

我正在传递nil给它optionsoutError同时调用它。

0 投票
0 回答
86 浏览

bash - 为什么 NSFileWrapper 在 Sandbox 中设置隔离位

我无法弄清楚为什么我对NSFileWrapper's 的调用仅在沙箱addRegularFileWithContents:preferredFileName:中设置文件隔离位(如在文件上使用时所见)。xattr -l我的应用程序将文件保存在文档包中,所以我认为这是我需要使用的方法,但隔离位让我发疯。

也许这是某种功能,但我的应用程序也chmod将这些文件作为可执行文件并将它们作为 shell 脚本运行,使用NSTask. 但是,使用隔离位时,我从 bash shell 中收到错误(这已在堆栈溢出中有很好的记录)。

有没有其他人经历过这个,你知道这些是错误还是功能?目前解决这个问题的唯一方法是提前知道文件的外壳,而不是依赖文件顶部的解释器(即#!/usr/bin/php),但这是解决不应该出现的问题的烦人的黑客行为。

0 投票
0 回答
112 浏览

macos - 对 NSFileWrapper 内容的更改从终端可见但未显示在 Finder 中

我最近将我的 OS X 应用程序转换为使用基于包的文件格式而不是单文件格式。我的文档类是 NSDocument 的子类,我使用 -fileWrapperOfType: 来生成用于写入的文件包装器,并让框架写入磁盘。(换句话说,我没有使用 NSFileWrapper 本身的任何写入方法。)

我正在运行 10.9.4、Xcode 5.1.1、10.9 SDK。

我可以正常读取和写入文件,如果我对文档进行更改,它们确实会正确写入文件包。当我从终端检查文件包内容时,我可以看到更改,并且当我重新读取文件时,更改按预期存在。

但是,当我使用“显示包内容”命令检查包内容时,更改不会出现在 Finder 中。

我需要做些什么来让 Finder 识别包内容的更改吗?

感谢您对此提出任何建议或想法!