如果一个键启动@符号,则在NSDictionary上使用valueForKeyPath?

Mic*_*all 18 iphone objective-c nsdictionary key-value-coding

我想valueForKeyPath在my 上使用NSDictionary,但问题是其中一个键是一个以@符号开头的字符串.我无法控制密钥的命名.

我在尝试创建密钥路径时遇到问题,因为我收到格式异常,即使在尝试转义@符号时也是如此:

这很好用:

[[[dict objectForKey:@"key1"] objectForKey:@"@specialKey"] objectForKey:@"key3"]
Run Code Online (Sandbox Code Playgroud)

但是这些都不起作用:

[dict valueForKeyPath:@"key1.@specialKey.key3"]
[dict valueForKeyPath:@"key1.@@specialKey.key3"]
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢,

麦克风

pxl*_*pxl 20

如果要使用键值编码,则不应使用带有键名的@符号.

apple的关键名称指南如下:

密钥必须使用ASCII编码,以小写字母开头,并且可能不包含空格.

您必须找到一种解决方法,以便在您获得密钥时重新格式化密钥字符串,使其符合KVC标准.


Tec*_*Zen 13

只是稍微更新这个老问题......

这些原因:

[dict valueForKeyPath:@"key1.@specialKey.key3"]
[dict valueForKeyPath:@"key1.@@specialKey.key3"]
Run Code Online (Sandbox Code Playgroud)

...失败的是,密钥路径中的任何"@"符号都被解释为集合的运算符,如下所示:

[dict valueForKeyPath:@"key1.@sum.key3"] // returns the sum of all 'key3' values
[dict valueForKeyPath:@"key1.@avg.key3"] // returns the average of all 'key3' values
Run Code Online (Sandbox Code Playgroud)

嵌套的键调用:

[[[dict objectForKey:@"key1"] objectForKey:@"@specialKey"] objectForKey:@"key3"]
Run Code Online (Sandbox Code Playgroud)

...工作,因为单个键不作为关键路径处理.