Базовые данные / NSTextView ломаются только после сохранения - PullRequest
0 голосов
/ 05 мая 2011

У нас есть NSTextView и сохранены некоторые данные о его содержимом в контексте управляемых объектов основных данных. Все отлично работает, пока контекст управляемого объекта остается в памяти. Однако, когда мы сохраняем его, мы получаем очень странное поведение при получении запроса.

Например, мы запускаем запрос на выборку, который запрашивает все элементы с textLocation, меньшим или равным 15. Первый объект в массиве, который мы получаем, имеет textLocation 16.

Я знаю, что не могу получить здесь однозначного ответа, так как код довольно сложный. Но кто-нибудь знает, чем пахнет этот вопрос?

Я думаю, что после сохранения мы каким-то образом не синхронизируем правильные MOC с NSTextView? Что может измениться, что сломает это?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 мая 2011

Мне наконец удалось понять, что происходит.Я устанавливал textLocation с помощью setPrimitiveValue ... просто потому, что я не хотел, чтобы уведомления запускались.Оказывается, это действительно плохая идея, потому что Core Data не знала, что значение изменилось.Он все еще думал, что значение было 15 вместо 16.

Пусть это будет урок: никогда не обходите KVO, если вы не ВНУТРИ управляемого объекта и не знаете, что делаете!

0 голосов
/ 05 мая 2011

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

Действительно, единственный способ получить это (в обратном порядке вероятности):

  1. Запутайте определение атрибута так, что вы думаете, что вы сохраняете один тип числовой информации, но что вы на самом деле сохраняете другой.
  2. Вы исказили предикат, чтобы он действительно искал значения 16 или более. (Вы можете протестировать предикаты для массива словарей, ключи которых имеют те же имена, что и ваши сущности Core Data.)
  3. Ошибка преобразования числа и строки в целях отображения в пользовательском интерфейсе или ведения журнала.

Я бы начал с (3) сам, потому что это кажется более распространенным, и пока вы не подтвердите, что у вас нет проблем с отображением, вы не можете диагностировать другие проблемы.

...