Cocoa Bindings не обновляет значение NSTextField

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

У меня есть NSTextField, привязанный к свойству в моем делегате приложения. Когда я изменяю значение в текстовом поле, свойство делегата приложения изменится. Однако, если я пойду другим путем и программно изменю связанный ключ свойства, значение текстового поля не обновится. Тем не менее, это происходит в виде таблицы.

Что здесь происходит не так? Как обновить текстовое поле?

РЕДАКТИРОВАТЬ:

Я попробовал все 3 из них с тем же результатом

[_addEntry setValue:@"Chet" forKey:@"payee"];
[_addEntry setPayee:@"chet"];
_addEntry.payee = @"chet";

РЕДАКТИРОВАТЬ:

Вот простой пример, чтобы уточнить мою точку зрения

https://dl.dropboxusercontent.com/u/48014761/test.zip

метка и текстовое поле привязаны к свойству "str". Изначально он нулевой. нажмите log, чтобы увидеть это в консоли. нажмите кнопку изменить строку, чтобы изменить строку. Войдите, чтобы проверить. Обратите внимание, что метка и текстовое поле не обновляются!

РЕДАКТИРОВАТЬ:

«Чего я пытаюсь достичь?»

Вот проект, над которым я работаю:

https://dl.dropboxusercontent.com/u/48014761/Write-Offs.zip

Я стараюсь максимально использовать Cocoa Bindings. У меня есть таблица с кучей данных. Однако с каждой записью будет связан массив изображений. Таким образом, когда я добавляю новую запись, мне нужно открыть новое окно, чтобы я мог установить свойства этой записи (а не через таблицу) вместе с загрузкой некоторых изображений.

Я не уверен, что правильно реализую addEntryWindow. Кажется, я должен создавать и уничтожать окно каждый раз, когда открываю и закрываю его. Кажется, этого не происходит.

Кроме того, [[self addEntry] setDate:[NSDate date]];, похоже, не решает проблему для меня.

Спасибо

Чет


person Chet    schedule 13.01.2014    source источник


Ответы (1)


Как вы программно меняете поле? Вы используете КВО? Поле находится внутри экземпляра NSManagedObject?

Привязки работают через КВО. Core Data отключает некоторые аспекты KVO для собственного внутреннего использования, и вы можете споткнуться об один из них.

Обновите свой вопрос с помощью примера кода и давайте посмотрим, что происходит.

Обновлять

Оба окна не обязательно должны находиться в одном и том же xib, но они должны общаться с одними и теми же экземплярами. В идеале они оба должны разговаривать с одним и тем же экземпляром NSManagedObject и, следовательно, разговаривать с одним и тем же NSManagedObjectContext.

Кто является владельцем каждого окна?

Хозяин тот же?

Если нет, создается ли новый стек Core Data?

Обновлять

В вашем тесте я смог исправить это тем, как вы редактировали свойство

- (IBAction)press:(id)sender {

  [self setStr:@"this"];
}

Вы обращались к iVar напрямую, а не к свойству. При прямом доступе к iVar KVO не срабатывает.

Кроме того, в ваших файлах xib вы обращались к self.str, что не нужно. Должно быть просто str.

Вы делаете какой-либо прямой доступ к свойствам в вашем реальном проекте?

Обновлять

Вы можете использовать метод доступа get, а затем метод доступа set:

[[self addEntry] setPayee:xxx];

Основываясь на переменных, которые вы используете, мне интересно, чего вы пытаетесь достичь. Можете ли вы опубликовать точный код программного изменения, которое вы пытаетесь ввести?

person Marcus S. Zarra    schedule 13.01.2014
comment
Я редактировал... Может быть, я что-то делаю неправильно - оба окна должны быть в одном файле xib? - person Chet; 14.01.2014
comment
проверьте мое новое редактирование - также не знаю, как определить, кто является владельцем каждого окна... Они оба находятся в файле MainMenu.xib - person Chet; 14.01.2014
comment
Все это указывает на один и тот же nsmanagedobjectcontext. Когда я что-то меняю в окне ввода, таблица меняется... - person Chet; 14.01.2014
comment
Ах. Ну, я пытаюсь установить свойство свойства. Я точно не могу [self setAddEntry.payee: chet]... - person Chet; 14.01.2014
comment
Так что я думаю, что я просто испортил то, как я реализовал несколько окон. Я создал новый .xib и NSWindowController для второго окна. Это все исправило... - person Chet; 15.01.2014