It looks like time to subclass or extend and add the functionality you need.

Sent from my iPhone

On Apr 27, 2019, at 7:26 PM, Richard Charles <rcharles...@gmail.com> wrote:

>> On Apr 7, 2019, at 11:03 AM, Quincey Morris 
>> <quinceymor...@rivergatesoftware.com> wrote:
>> 
>>> On Apr 5, 2019, at 20:55 , Richard Charles <rcharles...@gmail.com> wrote:
>>> 
>>> Sending the text field an abortEditing message does not work. How can 
>>> changes to the text field be discarded?
>> 
>> Caveat: I don’t know the answer to what you’re asking, but I suspect you may 
>> be asking the wrong question.
>> 
>> First of all, what does “does not work” mean?
> 
> 
> Sending the text field an abortEditing message results in no changes to the 
> text field. Nothing happens.
> 
> 
>> Second, looking at the documentation here:
>> 
>> https://developer.apple.com/documentation/appkit/nscontrol
>> 
>> the “abortEditing” method is listed under “Managing the Field Editor”. I 
>> suspect it’s actually used internally to manage the relationship between the 
>> text field’s cell and the field editor, and not to manage the editing state 
>> of the control as a while. This method is probably just the wrong hammer for 
>> this nail.
>> 
>> Third, what I think you’re looking for is “discardEditing”, which is a part 
>> of the NSEditor protocol, to which NSTextField conforms. However, I’m not 
>> entirely sure about timing, whether it’s reasonable to invoke in response to 
>> “attemptRecoveryFromError:…”. But maybe.
> 
> 
> According to macOS 10.13 documentation (NSKeyValueBinding.h) discardEditing 
> is implemented by controllers, CoreData's managed object contexts, and user 
> interface elements.
> 
> However upon searching the macOS SDK, discardEditing is only implemented by 
> by NSController and NSViewController. It is not implemented by any user 
> interface elements. Testing has confirmed that NSTextField does not implement 
> discardEditing.
> 
> Sending the array controller bound to the text field a discardEditing message 
> does’t work either. Nothing happens. Switching back to a standard cocoa value 
> binding and placing symbolic breakpoints on -[NSController discardEditing] 
> and -[NSArrayController discardEditing] shows that when the user clicks 
> "Discard Change" in the alert panel, discardEditing is never called. So the 
> cocoa frameworks are using some other means to discard the change from the 
> text field.
> 
> 
>> Note that the documentation for NSEditor shows its methods as deprecated:
>> 
>> https://developer.apple.com/documentation/appkit/view_management/nseditor
>> 
>> I believe this is a documentation error. At some point, NSEditor was 
>> converted from an informal protocol to a formal protocol (so it would 
>> translate into Swift properly), and that causes this error in the 
>> documentation. If you look at the actual header file (NSKeyValueBinding.h), 
>> you can see that the formal NSEditor protocol has no deprecations:
>> 
>>> @protocol NSEditor <NSObject>
>>> 
>>> - (void)discardEditing;    // …
>>> - (BOOL)commitEditing;    // …
>> 
>> as well as the deprecations of the information protocol methods:
>> 
>>> @interface NSObject (NSEditor)
>>> - (void)discardEditing NS_DEPRECATED_MAC(10_0, API_TO_BE_DEPRECATED, "This 
>>> is now a method of the NSEditor protocol.");
>>> - (BOOL)commitEditing NS_DEPRECATED_MAC(10_0, API_TO_BE_DEPRECATED, "This 
>>> is now a method of the NSEditor protocol.”);
> 
> 
> In summary testing has shown that discardEditing messages are sent to 
> controllers which are bound to a text field during normal operation. But when 
> the user chooses "Discard Change" in an alert panel a discardEditing message 
> is never sent. The frameworks are using some other means to discard the 
> change from the text field.
> 
> So this all is a bit of a mystery how to programmatically discard a change 
> from a text field bound to an array controller.
> 
> --Richard Charles
> 
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
> 
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/cocoa-dev/zav%40mac.com
> 
> This email sent to z...@mac.com

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to