Я не могу найти никакой документации для этого конкретного случая, извините, но я думаю, что это:
[defs setValue:x forKeyPath:@"a.b.c"];
Реализуется что-то вроде этого:
[[defs objectForKey:@"a"] setValue:x forKeyPath:@"b.c"];
Итак, objectForKey:
возвращает nil
, а методы, вызываемые на nil
, просто ничего не делают. Это объясняет поведение, которое вы описали.