Когда вы вызываете setValue:forKey:
со значением nil, вызывается метод -setNilValueForKey:
. По умолчанию (в реализации NSObject) это вызывает недопустимое исключение аргумента. Вы можете сделать что-то еще с нулевым значением, переопределив -setNilValueForKey:
и делая все, что захотите.
В качестве альтернативы, если вы вызываете установщик anotherKey myObj напрямую, вы не должны получать исключение (конечно, в зависимости от реализации setAnotherKey:
):
myObj.anotherKey = [aDictionary valueForKey:@"keyDoesNotExist"];
Документация, которую вы читаете, вероятно, относится к NSMutableDictionary. Реализация NSMutableDictionary setValue:forKey:
вызывает removeObjectForKey:
, если значение равно nil. Это не относится к подклассам NSObject, что, как я предполагаю, и есть myObj.
Это поведение обсуждается в справочной документации NSKeyValueCoding Protocol .