2012-04-21 16 views
9

Ho un app che utilizza un'UIDocument che si basa NSFileWrapper. Il mio file wrapper è una directory chiamata "XXX.cp", con due file secondari "photo.data" e "photo.metadata". Sembra di salvare e caricare i documenti bene, però quando vado a Impostazioni \ Gestisci archiviazione \ Sconosciuto sub-file sono elencati separatamente:iCloud & NSFileWrapper: Questa è come 2 diversi file in Impostazioni

Settings

mi aspettavo di mostrare "XXX.cp" invece di questi due file secondari. Penso di avere il documento UTI istituito ed esportato correttamente:

UTI UTI Export

E penso che sto creando correttamente i wrapper di file (soprattutto perché si legge/scrive benissimo):

- (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;   
} 

Ma ancora nessun sigaro. Qualcuno sa qual è il problema? Grazie!

risposta

4

capito questo. Il problema era che dovevi avere un'estensione del nome di 3 lettere. Il mio aveva solo 2 lettere: ".cp". Sono passato a ".cap" e ha funzionato: P

+0

Ho riscontrato questo problema e ho 3 lettere per la mia estensione di file. Io uso l'estensione .tfx per il mio file wrapper basato su directory. Recentemente ho deciso di mettere i miei file wrapper in una cartella separata nel mio contenitore ubiquitario che chiamo SyncDocuments. In questo modo i singoli file non vengono visualizzati per l'utente. Ma questo è quello che voglio veramente perché i miei file di sottoclasse UIDocument non sono pensati per gli utenti con cui interagire direttamente. –

+0

Ho esattamente lo stesso problema, ma la mia estensione di file ha tre lettere (e un'icona). Penso che questo sia un po 'di pesce nell'UTI esportato. La mia impressione è che ci sia un qualche tipo di memorizzazione nella cache in iCloud e che la modifica dell'estensione da .cp a .cap risolva qualcosa che non funziona. – auco

+0

Hey Ray ama i tuoi tutorial, ma sto ancora avendo un problema. Posso far visualizzare i miei wrapper come pacchetto ma poi mio nsmetadataquery non li vede. Non evento se cerco tutti i documenti con *. Il mio primo tipo di documento funziona, ma le mie immagini non lo sono – zambono

1

Non ho cambiato il mio UTI essere tre caratteri. Rimane 11 caratteri. All'inizio vedevo lo stesso problema che Ray stava segnalando. Ho cercato nella documentazione di più e ho trovato nella "Guida alla programmazione delle app iOS" - "Risorse correlate alle app" sotto il paragrafo "Dichiarazione dei tipi di documento supportati della tua app" che "Per ogni tipo di documento devi fornire almeno le seguenti informazioni:

  • un nome
  • un'icona
  • i tipi di file

avevo fornito un nome ed i tipi di file, ma non un'icona. Così mi ha incitato alla piccola icona documento più impressionante Potrei in 22 secondi, l'ho aggiunto al mio progetto, l'ho aggiunto al Targe I tipi di documento di t e sul mio iPad, Impostazioni, iCloud, Gestisci archiviazione, MyApp, vedo solo il nome del file wrapper, NSMetadataItemDisplayNameKey style!

0

ho avuto lo stesso problema, ma la mia estensione avuto tre caratteri e ho avuto anche un'icona. Tuttavia, dopo aver letto this comment, ho provato a eliminare il LSItemContentTypes nella sezione CFBundleDocumentTypes ("Tipi: com.razeware.captionedPhoto" nella seconda immagine in "tipi di documento") e ha funzionato.

Ho anche notato che la demo WWDC "UIDocument e iCloud" non ha impostato LSItemContentType pure. Sembra un grosso bug per me, come lo stato the docs indica chiaramente che dovrebbe esserci un tipo di documento.