为什么没有setValue:forKeyPath在可变字典上调用抛出未知密钥路径的异常?

Pet*_*aný 2 objective-c key-value-coding

我有以下代码:

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[defs setObject:[NSNumber numberWithInt:100] forKey:@"test1.test2.test3"];
[defs setValue:[NSNumber numberWithInt:10] forKeyPath:@"test2.test3.test4"];
Run Code Online (Sandbox Code Playgroud)

据我所知,它setObject:forKey:创建了"test1.test2.test3"键和给定数字对象之间的关联.另一方面,setValue:forKeyPath:Key-Value-Coding方法试图找到路径"test2.test3.test4"的对象,但最后,它只是默默地做什么.它甚至没有修改字典!

令我困惑的是,setValue:forKeyPath:它不会引发任何异常,也不会报告任何错误.为什么是这样?这种行为记录在哪里吗?

Tom*_*ing 5

我找不到这个特定案例的任何文档,抱歉,但我的猜测是:

[defs setValue:x forKeyPath:@"a.b.c"];
Run Code Online (Sandbox Code Playgroud)

正在实现这样的事情:

[[defs objectForKey:@"a"] setValue:x forKeyPath:@"b.c"];
Run Code Online (Sandbox Code Playgroud)

所以objectForKey:返回nil,并且调用的方法nil什么都不做.这可以解释你所描述的行为.