NSDictionary序列化为NSString

ete*_*ter 0 serialization nsdictionary nsdata ios

我正在使用URLScheme,我需要将应用程序A中的序列化NSDictionary发送到我的应用程序B.

应用程序A中,我使用NSKeyedArchiver将我的NSDictionary序列化为NSData

    NSDictionary *myDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"This is value 1", @"key1", 
                                    @"value 2", @"key2",
                                    @"value3", @"key3", 
                                    @"", @"key4", 
                                    @"value5", @"key5", 
                                    @"value 6", @"key6", 
                                    nil];
NSMutableData *data = [[NSMutableData alloc] init];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:myDictionary];
    [archiver finishEncoding];
    [archiver release];

    NSString *bytes = [[[NSString alloc] initWithData:data
                                             encoding:NSASCIIStringEncoding] autorelease];
Run Code Online (Sandbox Code Playgroud)

应用程序B中,我使用的是NSKeyedUnarchiver

NSData *data = [[NSString stringWithFormat:@"%@", val] dataUsingEncoding:NSASCIIStringEncoding];        
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSDictionary *myDictionary = [[unarchiver decodeObject] retain];
[unarchiver finishDecoding];
[unarchiver release];
Run Code Online (Sandbox Code Playgroud)

我的序列化NSDictionary看起来像:

bplist00Ô01T$ topX $ objectsX $ versionY $archiverÑR$0¯
!"#$%&'()U $nullÓZNS.objectsWNS.keysV$ class | |
Tkey2Tkey5Tkey3Tkey1Tkey6Tkey4Wvalue 2o @

看起来我无法将此NSString转换为NSData并重新获取我的NSDictionary.

在[dataUsingEncoding:dataUsingEncoding:NSASCIIStringEncoding]之后NSData为NULL.

Tra*_*hor 5

查看NSJSONSerialization,使字典和数组成为json普通字符串格式变得轻而易举.

生成json数据NSDictionary*mydict = [NSDictionary dictionaryWithObjectsAndKeys:....

NSData* jsonData = [NSJSONSerialization dataWithJSONObject:info options:NSJSONWritingPrettyPrinted error:&error];
Run Code Online (Sandbox Code Playgroud)

并改变这一点:

NSError *error = nil;
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
Run Code Online (Sandbox Code Playgroud)

没有那么简单,你不需要任何外部库或设置.内置于