objective c - NSDocument para contener una carpeta completa?
objective-c cocoa (1)
Puede usar NSFileWrapper
como un directorio de paquete en aplicaciones basadas en documentos.
En el archivo Info.plist de su aplicación, indique que su tipo de documento es un paquete o paquete (clave LSTypeIsPackage
con valor YES
).
En su subclase NSDocument
, implemente los siguientes métodos para leer y escribir. En este ejemplo, supongo que las variables de instancia del modelo correspondientes son pdfData
y signatureBitmapData
, que se almacenan en el directorio del paquete bajo MainDocument.pdf y SignatureBitmap.png, respectivamente.
- (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;
}
Desde la perspectiva del usuario, el directorio del paquete aparece en Finder como si fuera un único archivo, al igual que los directorios Xcode .xcodeproj o paquetes de aplicaciones.
Pido disculpas si este argumento ya se ha cubierto, pero después de algunas investigaciones no encontré nada preciso.
Necesito hacer una aplicación basada en documentos, donde el documento no es realmente un solo archivo sino una colección estructurada de archivos, en un directorio. Las ventanas mostrarán un pdf contenido en la carpeta, con un nombre de archivo específico, y lo enriquecerán con información de los otros archivos en la carpeta. No puedo usar las anotaciones en pdf para lograr esto, realmente necesito mantener los archivos separados del pdf.
¿Cuál es el mejor enfoque para lograr esto? Todo el código de muestra que encontré usa un solo archivo ...