In Cocoa, the action seems to be sent when the control loses focus or
Enter is pressed, regardless of whether the value has actually changed.
In Interface Builder, I made a window with two text fields and a
slider. Each text field's action is set to takeIntegerValueFrom: and
its target is the slider. If I put 0 in one field and 100 in the
other, the slider moves back and forth as I click on the two fields.
Updating the value for a binding, on the other hand, is called from -
[NSTextField textShouldEndEditing:]. The value is updated only if the
contents of the field have actually changed. I got the following stack
trace by binding to a custom class whose setter always crashes:
#0 0x90e7abfa in _objc_error
#1 0x90e7ac30 in __objc_error
#2 0x90e79637 in _freedHandler
#3 0x00001f7f in -[BadSetter setValue:] at BadSetter.m:24
#4 0x909565f4 in _NSSetIntValueAndNotify
#5 0x9089f257 in _NSSetUsingKeyValueSetter
#6 0x9089ecee in -[NSObject(NSKeyValueCoding) setValue:forKey:]
#7 0x909237c1 in -[NSObject(NSKeyValueCoding) setValue:forKeyPath:]
#8 0x94828441 in -[NSBinder
_setValue:forKeyPath:ofObject:mode:validateImmediately:raisesForNotApplicableKeys:error
:]
#9 0x948281f2 in -[NSBinder setValue:forBinding:error:]
#10 0x94827e8b in -[NSValueBinder
_applyObjectValue:forBinding:canRecoverFromErrors:handleErrors:typeOfAlert:discardEditingCallback:otherCallback:callbackContextInfo:didRunAlert
:]
#11 0x94827b19 in -[NSValueBinder
applyDisplayedValueHandleErrors:typeOfAlert:canRecoverFromErrors:discardEditingCallback:otherCallback:callbackContextInfo:didRunAlert
:]
#12 0x9482a86e in -[NSValueBinder
_applyDisplayedValueIfHasUncommittedChangesWithHandleErrors:typeOfAlert:discardEditingCallback:otherCallback:callbackContextInfo:didRunAlert
:]
#13 0x948273fa in -[NSValueBinder
validateAndCommitValueInEditor:editingIsEnding:errorUserInterfaceHandled
:]
#14 0x948271b7 in -[_NSBindingAdaptor
_validateAndCommitValueInEditor:editingIsEnding:errorUserInterfaceHandled:bindingAdaptor
:]
#15 0x948270ef in -[_NSBindingAdaptor
validateAndCommitValueInEditor:editingIsEnding:errorUserInterfaceHandled
:]
#16 0x946f9eb1 in -[NSTextField textShouldEndEditing:]
#17 0x946f99ee in -[NSTextView(NSSharing) resignFirstResponder]
Andy Balholm
(509) 276-9718
andy@...
On Jun 23, 2009, at 1:06 AM, Fred Kiefer wrote:
> Andy Balholm wrote:
>> The bindings in my Company Info window are supposed to be read-write,
>> but they can only read the data from the model. Changes to the text
>> in
>> the fields do not change the model. I tried taking the bindings out
>> of
>> the NIB and binding the fields programmatically instead, and it
>> didn't
>> make any difference. Once again, it works fine under Cocoa, but not
>> under GNUstep.
>>
>
> Support for key value binding is still very limited in GNUstep. Most
> likely we are just missing a call to our internal method
> reverseSetValueFor: here. We are calling this method from [NSControl
> sendAction:to:] and this only gets called when you leave the text
> fields
> with the return key. In that case the values seem to get properly
> stored. What seems to be missing is a similar call when the field is
> changed by any other way.
> Does anybody know, when we should send the action for a text field?
> Perhaps we have to send that regardless of the way the field gets
> changed?
>
> Fred
>
_______________________________________________
Bug-gnustep mailing list
Bug-gnustep@...
http://lists.gnu.org/mailman/listinfo/bug-gnustep