2013-07-26 2 views
1

Я понимаю разницу между примитивным сеттером и не примитивным сеттером (уведомления KVO и все такое). Но если я напишу свой собственный setValue: forKey: и вызовите setPrimitiveValue: forKey :, мне нужно передать ему ТОЛЬКО значение? Я прочитал документацию, я искал ее, но я не мог найти никакого обсуждения об этом вообще.Пользовательские базовые поставщики данных - setValue: forKey: против setPrimitiveValue: forKey:

Редактировать: Спасибо, adpalumbo & Dave FN. Вы оба согласны, что это не должно быть того же значения. Мой настоящий вопрос. Я пишу свой собственный сеттер и геттер. Затем я вызываю setter в NSManagedObject, чтобы изменить его примитивное значение, но из-за того, как написан пользовательский getter, он все равно возвращает старое значение (значение примитива было изменено, но если вы вызываете пользовательский геттер до и после изменения , вы не увидите никаких изменений.). После этого я вызываю hasChanges в NSManagedObjectContext и возвращает NO! Если я вызову save в контексте, это изменение не будет сохранено вообще. Есть идеи? Нормальное поведение? Ошибка потенциального ядра?

+0

Быстрый вопрос в ответ на ваши изменения, вы вызываете 'willChangeValueForKey:' и 'didChangeValueForKey:' в вашем сеттере? –

+0

Ах ... вот и все. Я только добавил didChangeValueForKey: когда у меня возникла проблема. После добавления willChangeValueForKey: все работает нормально. Это не ошибка основных данных, и это не имеет ничего общего с тем, что пользовательский getter возвращает одно и то же значение. Я сказал, что знаю информацию о вещах KVO ... шутка на мне! Большое спасибо Dave FN! – headsupftw

+0

Очень легко пропустить один из этих вызовов, поскольку они автоматически добавляются для не-основных объектов данных, но не в этом случае. Я обновил свой ответ с правильным исправлением. Рад помочь. –

ответ

0

Нет, вам не нужно передавать одно и то же значение в хранилище примитивов. Подобно неядерным объектам данных, сеттер может назначить любое значение переменной экземпляра.

Конечно, когда вы вызываете valueForKey:, вы получите все, что было передано в примитивный магазин, а не то, что первоначально было передано setValue:forKey:, если вы не переопределите его и не вернете что-то еще.

EDIT
При переопределении сеттера Core Data, убедитесь, что вы обернуть setPrimitiveValue:forKey: с willChangeValueForKey: и didChangeValueForKey:.

0

Нет. Это одно из его применений.

Вы можете взять сложный объект в setValue:forKey: и сериализовать его в NSData или уменьшить его до некоторого ссылочного идентификатора перед вызовом setPrimitiveValue:forKey:.

Смежные вопросы