Вы можете использовать NSFileWrapper
в качестве каталога пакетов в приложениях на основе документов.
В файле Info.plist вашего приложения укажите, что тип вашего документа - пакет или пакет (ключ LSTypeIsPackage
со значениемYES
).
В вашем подклассе NSDocument
реализуйте следующие методы чтения и записи.В этом примере я предполагаю, что соответствующие переменные экземпляра модели - pdfData
и signatureBitmapData
, которые хранятся в каталоге пакета в MainDocument.pdf и SignatureBitmap.png соответственно.
- (BOOL)readFromFileWrapper:(NSFileWrapper *)dirWrapper
ofType:(NSString *)typeName
error:(NSError **)outError
{
NSFileWrapper *wrapper;
NSData *data;
wrapper = [[dirWrapper fileWrappers] objectForKey:@"MainDocument.pdf"];
data = [wrapper regularFileContents];
self.pdfData = data;
wrapper = [[dirWrapper fileWrappers] objectForKey:@"SignatureBitmap.png"];
data = [wrapper regularFileContents];
self.signatureBitmapData = data;
…
return YES;
}
- (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName
error:(NSError **)outError
{
NSFileWrapper *dirWrapper = [[[NSFileWrapper alloc]
initDirectoryWithFileWrappers:nil] autorelease];
[dirWrapper addRegularFileWithContents:self.pdfData
preferredFilename:@"MainDocument.pdf"];
[dirWrapper addRegularFileWithContents:self.signatureBitmapData
preferredFilename:@"SignatureBitmap.png"];
…
return dirWrapper;
}
Отс точки зрения пользователя, каталог пакетов отображается в Finder, как если бы это был один файл, очень похожий на каталоги Xcode .xcodeproj или пакеты приложений.