Pregunta

Me suelen codificar mis datos en un NSFileWrapper como este (os dejo el NSFileWrapper bits):

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

Y yo solemos recuperar mis datos al hacer esto:

- (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 veces, consigo NSData la espalda (no es nil), pero [unarchiver decodeObjectForKey:@"data"] se devuelve NIL.Parece como si no hay ningún objeto de la tecla @"datos" aunque no debería ser.Supongo que algo debe haber salido mal cuando la codificación, pero no estoy seguro de cómo atacar el problema este.¿Puedo tomar sólo lo que está en data y codificarla, no preocuparse si no tiene la clave correcta?Me refiero no sólo debe siempre ser uno de los principales "datos".

¿Fue útil?

Solución

¿Por qué es el código tan complicado :) El NSKeyedArchiver la clase tiene métodos auxiliares que hace lo que usted desea más simplemente :

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

// To turn NSData into your object again
return [NSKeyedUnarchiver unarchiveObjectWithData:data];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top