ฉันกำลังส่งNSString
และUIImage
ใช้บลูทู ธ ฉันตัดสินใจที่จะเก็บทั้งในและแล้วแปลงพจนานุกรมNSDictionary
NSData
คำถามของฉันคือวิธีการแปลงNSDictionary
เป็นNSData
และวีซ่าในทางกลับกัน?
ฉันกำลังส่งNSString
และUIImage
ใช้บลูทู ธ ฉันตัดสินใจที่จะเก็บทั้งในและแล้วแปลงพจนานุกรมNSDictionary
NSData
คำถามของฉันคือวิธีการแปลงNSDictionary
เป็นNSData
และวีซ่าในทางกลับกัน?
คำตอบ:
NSDictionary -> NSData:
NSData *myData = [NSKeyedArchiver archivedDataWithRootObject:myDictionary];
NSData -> NSDictionary:
NSDictionary *myDictionary = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithData:myData];
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];
คุณสามารถทำได้กับคลาสใด ๆ ที่สอดคล้องกับ NSCoding
ใช้ NSJSONSerialization:
NSDictionary *dict;
NSData *dataFromDict = [NSJSONSerialization dataWithJSONObject:dict
options:NSJSONWritingPrettyPrinted
error:&error];
NSDictionary *dictFromData = [NSJSONSerialization JSONObjectWithData:dataFromDict
options:NSJSONReadingAllowFragments
error:&error];
ผลตอบแทนล่าสุดid
ดังนั้นจึงเป็นความคิดที่ดีที่จะตรวจสอบชนิดของวัตถุที่ถูกส่งคืนหลังจากที่คุณร่าย (ที่นี่ฉันส่งไปที่ NSDictionary)
ในSwift 2คุณสามารถทำได้ด้วยวิธีนี้:
var dictionary: NSDictionary = ...
/* NSDictionary to NSData */
let data = NSKeyedArchiver.archivedDataWithRootObject(dictionary)
/* NSData to NSDictionary */
let unarchivedDictionary = NSKeyedUnarchiver.unarchiveObjectWithData(data!) as! NSDictionary
ในสวิฟต์ 3 :
/* NSDictionary to NSData */
let data = NSKeyedArchiver.archivedData(withRootObject: dictionary)
/* NSData to NSDictionary */
let unarchivedDictionary = NSKeyedUnarchiver.unarchiveObject(with: data)
Any?
ประเภท แต่มันก็แสดงให้เห็นข้อผิดพลาดการแปลงจากไปNSDictionary
NSData
ดังนั้นฉันจึงลองใช้รหัสของคุณ มันไม่ได้ผล.
NSDictionary จาก NSData
http://www.cocoanetics.com/2009/09/nsdictionary-from-nsdata/
NSDictionary เพื่อ NSData
คุณสามารถใช้คลาส NSPropertyListSerialization ดูวิธีการ:
+ (NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format
errorDescription:(NSString **)errorString
ส่งคืนวัตถุ NSData ที่มีรายการคุณสมบัติที่กำหนดในรูปแบบที่ระบุ
โปรดลองอันนี้
NSError *error;
NSDictionary *responseJson = [NSJSONSerialization JSONObjectWithData:webData
options:NSJSONReadingMutableContainers
error:&error];
response
responce
ฉันแก้ไขให้คุณแล้ว