- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 UIDocument,我希望它由 (1) 一个 txt 文件和 (2) 几个 jpg 图像组成。我将 txt 和所有 jpg 放入 NSFileWrapper 中。
当我加载 UIDocument 时,我很快就需要 txt 文件中的信息,因此我首先加载它并忽略所有图像,直到我真正需要它们为止。
虽然我知道如何延迟加载图像,但我不确定如何“延迟”保存图像(特别是在使用 iCloud 时,我不希望不必要地上传/下载文件)。假设我已经加载了所有图像并且没有更改它们。然后我想保存 UIDocument,忽略所有图像(因为它们没有更改),但想保存更改后的文本。
我如何实现这一目标?有可能吗?还是自动完成?或者我应该不将图像放入 UIDocument 中并让每个图像由不同的 UIDocument 处理?恐怕这对我来说有点困惑。
到目前为止,这是我的代码,它将保存所有图像和文本(无论它们是否更改):
<小时/>UIDocument
-(id)contentsForType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {
NSMutableDictionary *wrappers = [NSMutableDictionary dictionary];
// the following puts a wrapper into a dictionary of wrappers:
[self encodeObject:self.text toWrappers:wrappers toFileName:@"text.data"];
[self encodeObject:self.photos toWrappers:wrappers toFileName:@"photos.data"];
NSFileWrapper *fileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:wrappers];
return fileWrapper;
}
<小时/>
[self.doc saveToURL:self.doc.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success) {
[self.doc closeWithCompletionHandler:^(BOOL success) {}];
}];
最佳答案
您应该在 UIDocument 实例中保留对 NSFileWrapper 的引用。这样,只有更改的内容才会被重写,而不是整个包装器。
因此,在加载文件时保留一个引用(或为新文档创建新文件):
- (BOOL)loadFromContents:(id)contents ofType:(NSString *)typeName error:(NSError **)outError {
// save wrapper:
self.fileWrapper = (NSFileWrapper*)contents;
现在,如果您的文件实际发生更改,您只需更新包装器:
- (id)contentsForType:(NSString *)typeName error:(NSError **)outError {
NSFileWrapper *subwrapper = [self.fileWrapper.wrappers objectForKey:@"subwrapper"];
if(self.somethingChanged) {
[self.fileWrapper.wrappers removeFileWrapper:subwrapper];
subwrapper = [[NSFileWrapper alloc] initRegularFileWithContents:…
我知道代码非常简短,但我希望这有助于为您指明正确的方向。
关于iphone - UIDocument、NSFileWrapper 和图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10983903/
我们正在将一个包含大量跨平台代码的应用程序移植到 Cocoa。必须使用直接对磁盘上的文件进行加载/保存的低级文件处理例程。 由于 NSFileWrapper 旨在通过 NSData 呈现内存中文件的内
我正在创建一个 NSDocument 包,其中可能包含数百个大文件,因此我不想在打开文档时读取全部内容。 我花了一些时间寻找,但找不到明确的答案。大多数人似乎认为 NSFileWrapper 将所有数
假设我有一个 NSFileWrapper 目录。该目录由几级目录和文件组成。有些文件很大。这些文件是全部加载到内存中,还是延迟加载? 如果它们被加载到内存中,是否有任何替代 NSFileWrapper
我有一个 NSFileWrapper 目录,我想在其中更新某个 FileWrapper。我想知道最好的方法是什么? 到目前为止,我已经使用了这段代码: [self.fileWrapper addReg
我有一个 UIDocument,我希望它由 (1) 一个 txt 文件和 (2) 几个 jpg 图像组成。我将 txt 和所有 jpg 放入 NSFileWrapper 中。 当我加载 UIDocum
我正在使用 NSFileWrapper 作为我的包文档。有时,当我请求包内文件的数据时,我得到nil。 这是我查询包内文件数据的方法: - (NSData*) dataOfFile(NSString*
我有一个应用程序正在使用 NSFileWrapper 创建用户数据的备份。此备份文件包含文本和媒体文件(此处与压缩无关)。有时这些备份文件会变得非常大,超过 200 MB。当我调用 NSFileWra
我们最近将代码转换为使用 UIDocument 而不是直接在文件系统上操作文件,因此我们遇到了一些性能问题。我们想知道我们是否错误地使用了这个类,是否有其他人遇到过这些问题,以及解决这些问题的常用方法
我想让我的应用程序文件系统保留其中每个文件的元数据,但也支持在用户端创建目录。我看过 NSFileWrapper 但它似乎将带有元数据的文件保存为目录。这是有道理的,但是现在我如何区分实际目录和 NS
我有一个基于 NSDocument 的应用程序,它使用文件包装器来保存和加载其数据。文档可以有各种资源,所以我不想把所有东西都加载到内存中。我可能在做一些根本性的错误,但是一旦我更改了一个(内部)文件
给定一个 NSFileWrapper 对象(用于文件或目录),是否有任何方法可以获取磁盘上实际文件位置的完整路径? [fileWrapper filename] 只返回文件名,而不是路径,所以这不是我
我正在制作一个基于文档的 Cocoa 应用程序,其中文档是动态文件的集合(用户可以添加或删除文件)。特别是,保存和打开操作应尽可能快。 如果我正确理解文档,我应该使用 NSFileWrapper并实现
我在将 NSFileWrapper 文档与 iCloud 同步时遇到问题。我能够创建我的包装器并将其保存到我无处不在的容器中。 当我尝试从创建它的设备读取它时,它起作用了。当我尝试从另一台从 iClo
很抱歉,如果这很明显,但我正在为如何从 NSFileWrapper 和 docs were not particular enlightening. 中提取组件而苦苦挣扎。 我有两个包装器。一个包含一
如何播放给定 NSFileWrapper 的电影? 我希望在 MPMoviePlayerController 中找到一个 initWithData: 构造函数(如 AVAudioPlayer ),但只
我正在查看 NSFileWrapper 类,它在 iOS 上将许多文件组合成一个逻辑文件。 ( demo ) 其他平台如何与这种格式互动?通过电子邮件/http 发送此文档类型时会发生什么情况? 最佳
NSFileWrapper 的 serializedRepresentation 在导入 Cocoa 框架时返回不适当的大数据,而不仅仅是导入 Foundation 框架。我怎样才能阻止 serial
我有一个基于 UIDocument 的应用程序,它使用 NSFileWrapper 来存储数据。 “主”文件包装器包含许多其他目录文件包装器,每个包装器代表文档的不同页面。 每当我在保存 UIDocu
我有一个基于 UIDocument 的应用程序,它使用 NSFileWrapper 来存储数据。 “主”文件包装器包含许多其他目录文件包装器,每个包装器代表文档的不同页面。 当保存一个只有一小部分页面
我有以下 Objective-C 代码: NSFileWrapper* fileWrapper; NSMutableDictionary* wrappers = [NSMutableDictionar
我是一名优秀的程序员,十分优秀!