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 using registerdefaults:.

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

Popular posts from this blog

c++ - Convert big endian to little endian when reading from a binary file -

C#: Application without a window or taskbar item (background app) that can still use Console.WriteLine() -

unicode - Are email addresses allowed to contain non-alphanumeric characters? -