Я читаю документацию, в которой говорится, что setValue:forKey:
будет обрабатывать значение NULL
, как если бы оно было удалено. Тем не менее, у меня есть пример, такие как следующие, которые последовательно разбивая:Кодирование ключевых значений - setValue: forKey: где значение NULL
[myObj setValue:[aDictionary valueForKey:@"keyDoesNotExist"] forKey:@"anotherKey"];
Эта строка кода аварии, если aDictionary
не содержит ключа keyDoesNotExist
. Есть ли способ обойти это? Какая уместная вещь здесь?
myObj - это пример NSManagedObject
. «anotherKey» - это отношение «один ко многим», в котором myObj может содержать много «anotherKey».
Спасибо за объяснение. даже когда я пошел вперед и определил setNilValueForKey :, я получаю EXEC_BAD_ACCESS. aDictionary определенно существует, и в нем есть другие ключи, но не ключ keyDoesNotExist. – randombits
В моем ответе не учитывался тот факт, что myObjc является объектом NSManagedObject, поскольку вы еще не добавили его на свой вопрос. Тем не менее, EXC_BAD_ACCESS указывает на ошибку управления памятью, вероятно, из-за того, что вы отправляете сообщение (вызывающее метод) на объект, который был освобожден. Другими словами, это, вероятно, проблема управления памятью, а не проблема с вызовом 'setValue: ForKey:' с нулевым значением. Не видя больше своего кода, его невозможно диагностировать. Попробуйте запустить вашу программу с помощью инструмента «Инструмент зомби». –
Вы должны добавить NSZombieEnabled со значением YES в качестве переменной среды вашего исполняемого файла. Затем повторно запустите свой код. Если это зомби, вы получите сообщение об ошибке в консоли, например сообщение «- [MyClass methodName]», отправленное на освобожденный экземпляр ». – Roberto