objective c - Binding returns default value (set with registerDefaults:) instead of zero -
here's setup:
mytextfield
bound key in shared user defaults controller. user can enter numbers in text field.- each time application loads, load default preferences (from app's resources folder) using
[[nsuserdefaults standarduserdefaults] registerdefaults: ... ]
. mymenuitem
's title bound same key in shared user defaults controller.
the issue:
when mytextfield
empty, mymenuitem
receives default value loaded using registerdefaults:
instead of value represents empty field (i expect 0 or nil
).
for example, when nstextfield
empty menu item receives "2", value loaded using registerdefaults:
, instead of value means field empty.
if comment registerdefaults:
code, binding returns nil
expect when there nothing in nstextfield
.
i tried mess around many of bindings' settings experiment placeholder values , looked @ cocoa bindings , user defaults docs not find solution.
expected behavior:
- when text field empty, want
mymenuitem
reflect instead of using default value registered usingregisterdefaults:
.
any appreciated.
i got hints nice folks @ irc.freenode.org #macdev , found following solution problem:
creating subclass of nsformatter (or nsnumberformatter in case) , overriding getobjectvalue:forstring:errordescription:
follows overrides default behaviour of returning nil
(which makes binding use registered default value) instead return 0 when text field empty.
- (bool)getobjectvalue:(id *)anobject forstring:(nsstring *)string errordescription:(nsstring **)error { if ([string isequaltostring:@""]) { *anobject = [nsnumber numberwithint:0]; return yes; } else { return [super getobjectvalue:anobject forstring:string errordescription:error]; } }
a nsvaluetransformer subclass' reverse conversion method have worked this.
Comments
Post a Comment