Re: No validation with a bound NSTableView and custom NSFormatter
Re: No validation with a bound NSTableView and custom NSFormatter
- Subject: Re: No validation with a bound NSTableView and custom NSFormatter
- From: Quincey Morris <email@hidden>
- Date: Tue, 01 May 2012 17:25:17 -0700
On May 1, 2012, at 16:23 , Ben Kennedy wrote:
> I confess to have mis-described my situation somewhat: while most columns were bound, several instead used the classical NSTableViewDataSource style, including the one for which I'm having the validation trouble. Sure enough, when I connect a binding for that column, the formatter-imposed validation now works -- regardless of whether "validates immediately" is in force or not, contrary to your suggestion. (I was certain that I had tested that already, but apparently I didn't.)
>
> However, the reasons I'm serving data for this column programatically are
>
> a) to offset the displayed value according to a document-level property (when the data set is in a "read-only" mode), and
>
> b) to be able to calculate and apply a related change to other columns when the current value is modified.
>
> Before I started using NSArrayController or bindings, validation used to work. There must be something else I have overlooked here. Why is validation failing for the non-binding (NSTableViewDataSource-backed) columns?
>
> Additionally: for a bound column, my understanding is that validate<Key>:error: should be called against the object to check validity (at least in the absence of an attached formatter). However, it doesn't. Is there a prerequisite I am failing to satisfy?
I'm not aware that KVC-style validation ever happens automatically *except* for bindings that have have "Validates immediately" checked. This idea is supported by the KVC documentation:
https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/Validation.html#//apple_ref/doc/uid/20002173-CJBDBHCB
AFAIK, the validation performed by a number formatter is limited to its own internal understanding (modified by the properties you set) of what a valid number looks like. I don't see how it could know what validate<Key>: method to call.
OTOH, if your bindings-based validation isn't working at all, then there's also some other factor at play here. It's worth triple-checking that you haven't misspelled a property name or a method name, causing the validation method to no longer match the property.
The other factor with validation methods is that the presence of a formatter changes what class of object the validation receives. Without any formatter, it gets a NSString (from a text field UI element). With a number formatter, it gets a NSNumber. Depending on how the validation method is coded, it might be doing the wrong thing if it gets an object of the "wrong" class.
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden