Кодирование значения ключа-setValue: forKey: где значение равно NULL
Я читаю документацию, в которой говорится, что setValue:forKey:
будет обрабатывать значение NULL
, как если бы оно было удалено. Тем не менее, у меня есть пример, такой как следующий, который постоянно терпит крах:
[myObj setValue:[aDictionary valueForKey:@"keyDoesNotExist"] forKey:@"anotherKey"];
Эта строка кода аварийно завершает работу, если aDictionary
не содержит ключа keyDoesNotExist
. Есть ли какой-нибудь способ обойти это? Что здесь уместно делать?
MyObj является примером NSManagedObject
. "anotherKey" - это отношение"один ко многим", в котором myObj может содержать много "anotherKey".
1 ответ:
При вызове
setValue:forKey:
с нулевым значением вызывается метод-setNilValueForKey:
. По умолчанию (в реализации NSObject) это вызывает исключение недопустимого аргумента. Вы можете сделать что-то еще с нулевым значением, переопределив-setNilValueForKey:
и делая все, что вы хотите.Альтернативно, если вы вызываете myobj's anotherKey setter напрямую, вы не должны получить исключение (зависит от реализации
setAnotherKey:
, Конечно):myObj.anotherKey = [aDictionary valueForKey:@"keyDoesNotExist"];
Документация, которую Вы читаете, вероятно, предназначена для NSMutableDictionary. Реализация NSMutableDictionary
setValue:forKey:
вызываетremoveObjectForKey:
, если значение равно nil. Это не верно для подклассов NSObject,которые, как я предполагаю, являются myObj.Это поведение обсуждается в справочной документации по протоколу NSKeyValueCoding .