标签: nsfilewrapper

UIDocument,NSFileWrapper和Images

我有一个UIDocument,我想由(1)一个txt文件和(2)几个jpg图像组成.我将txt和所有jpgs放入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;

    }
Run Code Online (Sandbox Code Playgroud)

当我想保存UIDocument时:

[self.doc saveToURL:self.doc.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success) {
    [self.doc closeWithCompletionHandler:^(BOOL success) {}];
}];
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch nsfilewrapper icloud uidocument

6
推荐指数
1
解决办法
2511
查看次数

替换NSFileWrappers

我有一个NSFileWrapper目录,我想在其中更新某个FileWrapper.我想知道最好的方法是什么?

到目前为止,我已经使用了这段代码:

[self.fileWrapper addRegularFileWithContents:photoData 
                           preferredFilename:@"photo.data"];
Run Code Online (Sandbox Code Playgroud)

但是,只要FileWraper已经存在,我就会在FileWrapper中看到重复的内容,如下所示:

"1__#$!@%!#__photo.data" = "<NSFileWrapper: 0x6bb0260>";
"2__#$!@%!#__photo.data" = "<NSFileWrapper: 0x6b89b80>";
"3__#$!@%!#__photo.data" = "<NSFileWrapper: 0x6ba1700>";
"4__#$!@%!#__photo.data" = "<NSFileWrapper: 0x6bc8480>";
"photo.data" = "<NSFileWrapper: 0x6bcfc50>";
Run Code Online (Sandbox Code Playgroud)

如何防止这种情况并简单地替换FileWrapper - 在本例中为photo.data?我没有找到任何替换NSFileWrapper类参考中的FileWrappers的方法.

iphone cocoa objective-c nsfilewrapper

6
推荐指数
1
解决办法
852
查看次数

UIDocument和NSFileWrapper - NSFastEnumerationMutationHandler在保存期间更改文件包装器

我有一个UIDocument基于应用程序,使用NSFileWrappers来存储数据.'master'文件包装器包含许多其他目录文件包装器,每个包装器代表文档的不同页面.

每当我在UIDocument保存(in writeContents:andAttributes:safelyToURL:forSaveOperation:error:)时对文档进行更改时,应用程序崩溃.这是堆栈跟踪:

UIDocument崩溃堆栈跟踪

很明显,我正在修改UIDocument在后台枚举的文件包装器的同一个实例.实际上,我检查了当返回数据模型的快照时contentsForType:error:,返回的子文件包装器指向与数据模型中当前驻留(和正在编辑)的对象相同的对象,而不是副本.

- (id)contentsForType:(NSString *)typeName error:(NSError *__autoreleasing *)outError
{
    if (!_fileWrapper) {
        [self setupEmptyDocument];
    }
    return [[NSFileWrapper alloc] initDirectoryWithFileWrappers:[_fileWrapper fileWrappers]];
}
Run Code Online (Sandbox Code Playgroud)

这是实施此方法的认可方法(根据WWDC 2012会议218 - 使用带有UIDocument的iCloud).

所以我想问题是:这种方法如何是线程安全的?

当主文件包装器fileWrappers本身是目录文件包装器时,情况是否有所不同?如果受制裁的方法是错误的,应该怎么做?

save thread-safety nsfilewrapper ios uidocument

6
推荐指数
1
解决办法
2380
查看次数

使用ZIP存档存储NSDocument数据

我注意到Apple开始使用zip存档来替换iWork应用程序中的文档包(在Finder中显示为单个文件的文件夹).我正在考虑做同样的事情,因为我一直得到与我的文档包相关的支持电子邮件在将它们复制到Windows文件服务器时被破坏.

我的问题是在基于NSDocument的应用程序中执行此操作的最佳方法是什么?

我想最简单的方法是创建一个目录文件包装器,创建它的存档并在NSDocument中返回它

- (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName error:(NSError **)outError
Run Code Online (Sandbox Code Playgroud)

但我不明白如何创建NSFileWrapper的zip存档.

zip cocoa objective-c nsdocument nsfilewrapper

5
推荐指数
1
解决办法
1918
查看次数

从NSAttributedString中的nsfilewrapper/nstextattachment获取文件名和路径

我有一个基本的NSTextView,启用了丰富的文本和图形(在IB中).我想得到的是拖入的任何图像的路径和文件名,所以我可以将它们传递给另一个类.

我是NSAttributedString的新手,但我有一个循环使用enumerateAttributesInRange:options:usingBlock:寻找NSAttachmentAttributeName,这一切都正常.但是深入一点,我进入了fileWrapper类,显然无法给出项目的路径.

我如何获得NSTextAttachment的名称和路径?

相关:是否有更简单的方法来获取它们然后单步执行属性?

非常感谢!

cocoa nstextview nsattributedstring nstextattachment nsfilewrapper

5
推荐指数
1
解决办法
2105
查看次数

检查Cocoa中的两个文件是否相同

你如何有效地检查Cocoa中的两个文件是否相同(具有相同的数据)?

上下文:我正在编写一个程序,它接收一个文件作为输入(输入文件)并将其复制到一个目录中.如果目录已包含具有相同名称的文件(同名文件),则仅当同名文件不同时,才应使用新名称复制输入文件.

macos file-io cocoa nsfilemanager nsfilewrapper

5
推荐指数
1
解决办法
1053
查看次数

NSFileWrapper基础知识:如何提取组件

很抱歉,如果这是显而易见的,但我正在努力如何从NSFileWrapper中提取组件,而且文档并不特别有启发性.

我有两个包装.一个人拥有一个简单的txt文件.另一个持有pageSettings.PageSettings是一个NSObject,它包含几个NSStrings,BOOL等.这是我的包装器(基于Apple的基于文档的iOS应用程序编程指南),我现在仍然试图再次提取信息:

    if (self.fileWrapper == nil) {
    self.fileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:nil];
}

NSDictionary *fileWrappers = [self.fileWrapper fileWrappers];

if (([fileWrappers objectForKey:@"page"] == nil) && (self.text != nil)) {
    NSData *textData = [self.text dataUsingEncoding:NSUTF8StringEncoding];
    NSFileWrapper *textFileWrapper = [[NSFileWrapper alloc] initRegularFileWithContents:textData];
    [textFileWrapper setPreferredFilename:@"page"];
    [self.fileWrapper addFileWrapper:textFileWrapper];
}

if (([fileWrappers objectForKey:@"pageSettings"] == nil) && (self.pageSettings != nil)) {
    NSData *settingsData = [NSKeyedArchiver archivedDataWithRootObject:self.pageSettings];
    NSFileWrapper *settingsWrapper = [[NSFileWrapper alloc] initRegularFileWithContents:settingsData];
    [settingsWrapper setPreferredFilename:@"pageSettings"];
    [self.fileWrapper addFileWrapper:settingsWrapper];
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是如何将txt文件和pageSettings加载回self.text和self.pageSettings?

我用- (NSData *)serializedRepresentation吗?如果是这样,怎么样?或者我只是像这样反转它:

NSDictionary …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c nsfilewrapper ios icloud

4
推荐指数
1
解决办法
2846
查看次数

iOS应用程序,包含核心数据,照片和iCloud

我正在开发一个使用核心数据(使用UIManagedDocument)的应用程序,用于存储我想与iCloud同步的用户生成的数据.我还想在应用程序中同步用户使用相机拍摄的照片.

我读到将实际照片存储在核心数据中不是一个好主意; 相反,最好将照片存储在文件系统中,并将fileURL放入核心数据中.

使用此方法时,使用UIDocument将照片存储在文件系统中(在"文档"文件夹下)时,建议的方法是什么?我想过:

  1. 对于每张单独的照片,请使用NSFileWrapper(包含实际图像和缩略图),或
  2. 使用顶级NSFileWrapper,并为每张照片放入所有NSFileWrappers
  3. 与#2类似,但只是将所有照片/缩略图直接放在顶级NSFileWrapper中

哪种方法更适合与iCloud同步照片?还有更好的方法吗?

core-data nsfilewrapper ios icloud

4
推荐指数
1
解决办法
624
查看次数

NSFileWrapper是否将所有内容加载到内存中?

可以说我有一个NSFileWrapper目录.该目录由多个级别的目录和文件组成.有些文件很大.所有这些文件都加载到内存中,还是懒得加载?

如果将它们加载到内存中,是否有其他NSFileWrapper类似功能的替代方法无法将文件加载到内存中?我能挂进去的东西UIDocument


这适用于基于文档的应用程序,该应用程序使用UIDocument与iCloud同步的应用程序.文档可以在其中嵌入图像和视频.每个图像/视频都有一个HTML文档中显示的预览图像(缩略图).全尺寸图像或视频不应加载到内存中,而应按需加载.

我还需要一种方法来添加资源而不将其加载到内存中.像"initWithAsset:(ALAsset*)"这样的东西是理想的.

nsfilewrapper ios uidocument

4
推荐指数
2
解决办法
1707
查看次数

处理包含多个图像的 UIDocument 中的图像加载/存储

我有一个简单的模型对象,Location其中包含一些文本项和一个images : [UIImages]?. Location所以Codable我将文本位存储为 JSON,然后将图像写入相同的FileWrapper.

我的问题是如何存储图像文件和 [UIImage] 数组之间的关系。图像必须以相同的顺序返回。有没有办法可以连接到编码,以便数组被指向图像的 URL 替换?

或者,我应该始终将图像作为单独的文件(例如在缓存目录中)并将 [UIImage] 替换为 [URL]

nsfilewrapper ios uidocument swift

1
推荐指数
1
解决办法
983
查看次数