0

iPhone 开发问题(ObjectiveC)。

我正在尝试使用 TouchJSON 库,并且在序列化为 JSON 时遇到了一些麻烦。我已经打开了 ARC,所以我正在使用来自 github 的 ARC 分支。 我正在尝试我想象的一个相当基本的嵌套结构。里面的三个字典和字典里面的数组。

//Make some dictionaries with simple string pairs
NSDictionary *dicA = [NSDictionary dictionaryWithObjectsAndKeys:@"x", @"1", @"y", @"2", nil];
NSDictionary *dicB = [NSDictionary dictionaryWithObjectsAndKeys:@"x", @"1", @"y", @"2", nil];
NSDictionary *dicC = [NSDictionary dictionaryWithObjectsAndKeys:@"x", @"1", @"y", @"2", nil];

//Make an array of dictionary objects
NSArray *saveArray = [NSArray arrayWithObjects:dicA, dicB, dicC, nil];

//Make dictionary which has that array as one of the values
NSDictionary *bigDic = [NSDictionary dictionaryWithObjectsAndKeys:@"arr", saveArray,
                                                                  @"mmm", @"nnn", nil];

NSData *jsonData = [[CJSONSerializer serializer] serializeObject:saveArray error:NULL];
//This works '[{"1":"x","2":"y"},{"1":"x","2":"y"},{"1":"x","2":"y"}]'

NSData *jsonDataB = [[CJSONSerializer serializer] serializeObject:bigDic error:NULL];
//This fails

当我尝试序列化 bigDic 时,它会在运行时用以下内容轰炸:

'NSInvalidArgumentException',原因:'-[__NSArrayI UTF8String]:无法识别的选择器发送到实例

在上面的行中序列化一个数组似乎工作正常。我的 bigDic 怎么了?

4

1 回答 1

0

仔细写出这个问题后,我意识到我哪里出错了。我想我还是会发布这个。也许这对其他人来说是一个有用的例子。所以答案是...

我有我的字典回到前面!

dictionaryWithObjectsAndKeys 方法需要相反的值和键,因此构建此结构的正确方法是:

//Make some dictionaries with simple string pairs
NSDictionary *dicA = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"x", @"2", @"y", nil];
NSDictionary *dicB = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"x", @"2", @"y", nil];
NSDictionary *dicC = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"x", @"2", @"y", nil];

//Make an array of dictionary objects
NSArray *saveArray = [NSArray arrayWithObjects:dicA, dicB, dicC, nil];

//Make dictionary which has that array as one of the values
NSDictionary *bigDic = [NSDictionary dictionaryWithObjectsAndKeys:saveArray, @"arr",
                                                                  @"nnn", @"mmm", nil];

当您查看方法名称“dictionaryWithObjectsAndKeys”时,这是有道理的,但我不知道为什么它不作为“dictionaryWithKeysAndObjects”完成。

于 2011-12-18T13:21:12.693 回答