gpt4 book ai didi

iphone - UIDocument、NSFileWrapper 和图像

转载 作者:行者123 更新时间:2023-12-03 18:45:51 29 4
gpt4 key购买 nike

我有一个 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;

}
<小时/>

当我想保存 UIDocument 时:

[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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com