webentwicklung-frage-antwort-db.com.de

Wie kann ich NSDictionary nach NSData konvertieren und umgekehrt?

Ich sende NSString und UIImage über Bluetooth. Ich beschloss, beide in einem NSDictionary zu speichern und dann das Wörterbuch in NSData zu konvertieren.

Meine Frage ist, wie man NSDictionary in NSData konvertiert und umgekehrt?

155
Ali

NSDictionary -> NSData:

NSData *myData = [NSKeyedArchiver archivedDataWithRootObject:myDictionary];

NSData -> NSDictionary:

NSDictionary *myDictionary = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithData:myData];
356
Anh Nguyen

NSDictionary -> NSData:

NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:yourDictionary forKey:@"Some Key Value"];
[archiver finishEncoding];
[archiver release];

// Here, data holds the serialized version of your dictionary
// do what you need to do with it before you:
[data release];

NSData -> NSDictionary

NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSDictionary *myDictionary = [[unarchiver decodeObjectForKey:@"Some Key Value"] retain];
[unarchiver finishDecoding];
[unarchiver release];
[data release];

Sie können dies mit jeder Klasse tun, die mit NSCoding kompatibel ist.

Quelle

51
LeonS

Verwenden Sie NSJSONSerialization:

NSDictionary *dict;
NSData *dataFromDict = [NSJSONSerialization dataWithJSONObject:dict
                                                       options:NSJSONWritingPrettyPrinted
                                                         error:&error];

NSDictionary *dictFromData = [NSJSONSerialization JSONObjectWithData:dataFromDict
                                                             options:NSJSONReadingAllowFragments
                                                               error:&error];

Das letzte gibt id zurück, daher ist es eine gute Idee, den zurückgegebenen Objekttyp zu überprüfen, nachdem Sie das Casting durchgeführt haben (hier wurde das Casting auf NSDictionary durchgeführt).

39
user1244109

In Swift 2 können Sie dies folgendermaßen tun:

var dictionary: NSDictionary = ...

/* NSDictionary to NSData */
let data = NSKeyedArchiver.archivedDataWithRootObject(dictionary)

/* NSData to NSDictionary */
let unarchivedDictionary = NSKeyedUnarchiver.unarchiveObjectWithData(data!) as! NSDictionary

In Swift:

/* NSDictionary to NSData */
let data = NSKeyedArchiver.archivedData(withRootObject: dictionary)

/* NSData to NSDictionary */
let unarchivedDictionary = NSKeyedUnarchiver.unarchiveObject(with: data)
21
Luca Davanzo

NSDictionary von NSData

http://www.cocoanetics.com/2009/09/nsdictionary-from-nsdata/

NSDictionary zu NSData

Sie können dafür die NSPropertyListSerialization-Klasse verwenden. Schauen Sie sich die Methode an:

+ (NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format
                              errorDescription:(NSString **)errorString

Gibt ein NSData-Objekt zurück, das eine bestimmte Eigenschaftsliste in einem angegebenen Format enthält.

17
Jhaliya

Probieren Sie mal das hier an

NSError *error;
NSDictionary *responseJson = [NSJSONSerialization JSONObjectWithData:webData
                                options:NSJSONReadingMutableContainers
                                error:&error];
0