iCloud&NSFileWrapper:在设置中显示为2个不同的文件

我有一个应用程序使用基于NSFileWrapper的UIDocument。 我的文件包装器是一个名为“XXX.cp”的目录,有两个子文件“photo.data”和“photo.metadata”。 它似乎保存和加载文件,但是当我去设置\pipe理存储\未知的子文件分开列出:

设置

我期待它显示“XXX.cp”,而不是这两个子文件。 我认为我已经正确设置并导出了文档UTI:

UTIUTI导出

我想我正在创build文件包装(特别是因为它读取/写入罚款):

- (void)encodeObject:(id<NSCoding>)object toWrappers:(NSMutableDictionary *)wrappers preferredFilename:(NSString *)preferredFilename { @autoreleasepool { NSMutableData * data = [NSMutableData data]; NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:object forKey:@"data"]; [archiver finishEncoding]; NSFileWrapper * wrapper = [[NSFileWrapper alloc] initRegularFileWithContents:data]; [wrappers setObject:wrapper forKey:preferredFilename]; } } - (id)contentsForType:(NSString *)typeName error:(NSError *__autoreleasing *)outError { if (self.captionedPhotoMetadata == nil || self.captionedPhoto == nil) { *outError = [[NSError alloc] initWithDomain:CaptionedPhotoErrorDomain code:CaptionedPhotoInvalidDocument userInfo:[NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Invalid document!", @""), NSLocalizedDescriptionKey, nil]]; return nil; } NSMutableDictionary * wrappers = [NSMutableDictionary dictionary]; [self encodeObject:self.captionedPhotoMetadata toWrappers:wrappers preferredFilename:METADATA_FILENAME]; [self encodeObject:self.captionedPhoto toWrappers:wrappers preferredFilename:DATA_FILENAME]; NSFileWrapper * fileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:wrappers]; return fileWrapper; } 

但还是没有雪茄。 任何人都知道问题是什么? 谢谢!

想通了。 问题是你需要有3个字母的文件扩展名。 我只有两个字母:“.cp”。 我把它切换到“.cap”,它的工作:P

我没有改变我的UTI为三个字符。 它仍然是11个字符。 起初,我看到雷正在报道的同样的问题。 我查看了更多的文档,并在“声明您的应用程序支持的文档types”一节的“iOS应用程序编程指南” – “与应用程序相关的资源”中find:“对于每种文档types,您至less必须提供以下信息:

  • 一个名字
  • 一个图标
  • 文件types

我提供了一个名称和文件types,但不是一个图标。 所以我在22秒内掀起了我最可怕的小文件图标,将其添加到我的项目,将其添加到目标的文档types,并在我的iPad,设置,iCloud,pipe理存储,MyApp,我只看到文件包装名称,NSMetadataItemDisplayNameKey样式!

我有同样的问题,但我的扩展有三个字,我也有一个图标。 然而,在阅读这个评论之后 ,我尝试删除CFBundleDocumentTypes部分中的LSItemContentTypes (第二个图像“文档types”下的“Types:com.razeware.captionedPhoto”)并且它工作。

我还注意到,WWDC演示“Uidocument和iCloud”也没有设置LSItemContentType。 似乎对我来说是一个巨大的bug,因为文档明确指出应该有一个文档types。