#objective-c #cocoa #macos #nsarraycontroller #nstextfield
#objective-c #cocoa #macos #nsarraycontroller #nstextfield
Вопрос:
У меня есть текстовое поле, которое я использую для отображения «общей стоимости», вычисленной из нескольких других текстовых полей. Когда я получаю controlDidEndEditing:
, я вычисляю эту общую стоимость и помещаю ее в поле Общая стоимость, используя setDoubleValue:
. У меня есть значение поля Total Cost, привязанное к контроллеру массива, и если я изменяю значение поля вручную, то оно сохраняется в массиве контроллера. Однако, если я сделаю это программно, то отображение поля изменится, но массив и значение, отображаемые в моей таблице, не изменятся.
В чем причина?
Ответ №1:
Если у вас есть привязанный элемент управления, например текстовое поле, изменение его состояния с помощью метода, подобного setStringValue:, не приведет к запуску механизма привязок для передачи изменения цели привязки. Это просто часть конструкции привязок. Если вы хотите эффективно изменить значение текстового поля программно, вам нужно изменить его в вашем объекте модели, используя параметр для ключа, к которому вы его привязали, или используя setValue:forKey . Итак, если у вас есть nameTextField, привязанное к person.name вам нужно вызвать [person setName:newName] или [person setValue:newName forKey:@»name»].
Комментарии:
1. спасибо, чувак, способ, который ты мне показываешь, сделал мой ответ. но у меня была проблема с моим типом свойства! Это был тип NSNumber, и это setValue:forkeypath не принимают long, integer, float и т.д. Итак, я решаю свою проблему, используя:
[PurchaseArray setValue:[NSNumber numberWithInt:sum] forKeyPath:@"selection.purchaseTotal"];
где sum — целочисленный тип.2. Да, обычно KVO / KVC автоматически вставляет и распаковывает примитивные типы для вас.