Domanda

Di solito codificando i miei dati in un NSFileWrapper come questo (lascio fuori il bit nsfilewrapper):

-(NSData*)encodeObject:(id<NSCoding>)o {
        @autoreleasepool {            
            NSMutableData *data = [NSMutableData data];
            NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
            [archiver encodeObject:o forKey:@"data"];
            [archiver finishEncoding];
            return data;
        }
    }
.

e di solito ottengo i miei dati quando fai questo:

- (id)decodeObjectFromWrapperWithPreferredFilename:(NSString *)p {

    NSFileWrapper *wrapper = [self.fileWrapper.fileWrappers objectForKey:p];
    if (!wrapper) {
        NSLog(@"Unexpected error: Couldn't find %@ in file wrapper!", p);
        return nil;
    }

    NSData *data = [wrapper regularFileContents];
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

    NSLog(@"%@", [unarchiver decodeObjectForKey:@"data"]);
    return [unarchiver decodeObjectForKey:@"data"];

}
.

A volte, ottengo NSData Back (non è NIL), ma [unarchiver decodeObjectForKey:@"data"] restituirà NIL.Sembra che non ci sia alcun oggetto per la chiave @ "dati" anche se dovrebbe esserci.Immagino che qualcosa debba essere andato storto quando si codifica, ma non sono sicuro di come disturbare sparare questo.Posso semplicemente prendere qualsiasi cosa sia in data e codificarlo, non preoccuparti se ha la chiave giusta?Voglio dire che ci dovrebbero mai essere solo un tasto "dati".

È stato utile?

Soluzione

Perché il tuo codice è così complicato :) La classe NSKeyedArchiver ha metodi Helper che farà ciò che vuoi più semplicemente:

// to turn an object into NSData
return [NSKeyedArchiver archivedDataWithRootObject:o]; 

// To turn NSData into your object again
return [NSKeyedUnarchiver unarchiveObjectWithData:data];
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top