Кодирование значения ключа-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 .