Frage

Normalerweise kodiere ich meine Daten in einem NSFileWrapper so (ich lasse das NSFileWrapper-Bit weg):

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

Und normalerweise bekomme ich meine Daten zurück, wenn ich das tue:

- (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"];

}

Manchmal verstehe ich NSData zurück (es ist nicht Null), aber [unarchiver decodeObjectForKey:@"data"] wird NULL zurückgeben.Es sieht so aus, als gäbe es kein Objekt für den Schlüssel @"data", obwohl es eines geben sollte.Ich vermute, dass beim Codieren etwas schief gelaufen ist, aber ich weiß nicht, wie ich das Problem beheben kann.Kann ich einfach nehmen, was drin ist? data und verschlüsseln Sie es, ohne sich Gedanken darüber machen zu müssen, ob es den richtigen Schlüssel hat?Ich meine, es sollte immer nur ein Schlüsseldatenelement geben.

War es hilfreich?

Lösung

Warum ist Ihr Code so kompliziert :) Der NSKeyedArchiver Die Klasse verfügt über Hilfsmethoden, die das, was Sie wollen, einfacher erledigen:

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

// To turn NSData into your object again
return [NSKeyedUnarchiver unarchiveObjectWithData:data];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top