objective c - How can I continue my count from the correct spot once I load the saved count? -
i new @ coding, , practicing , making simple tally/counter app. trying save , load number users can continue left off once close app.
the save , load buttons work actually...except once load saved number, , press +1 or -1 buttons, starts 0 if fresh load of app without saved data.
how can make when user loads saved number, +1 , -1 buttons can read loaded number?
this +1 button..haven't changed it:
-(ibaction)up:(id)sender; { number = number + 1; count.text = [nsstring stringwithformat:@"%i", number]; }
these save , load buttons:
-(ibaction)save { nsuserdefaults *defaults = [nsuserdefaults standarduserdefaults]; [defaults setobject:@(self.number) forkey:@"number"]; [defaults synchronize]; } -(ibaction)load { nsuserdefaults *defaults = [nsuserdefaults standarduserdefaults]; [defaults setobject:@(self.number) forkey:@"number"]; self.number = [[defaults objectforkey:@"number"] integervalue]; }
here part @ bottom :
- (void)setnumber:(nsinteger)number { _number = number; self.label.text = [nsstring stringwithformat:@"%i", _number]; // part giving warning says "writable atomic property 'number' cannot // pair synthesized getter user defined setter }
and here .h
int number; @interface viewcontroller : uiviewcontroller { iboutlet uiswitch *theswitch; iboutlet uilabel *count; } -(ibaction)up:(id)sender; -(ibaction)down:(id)sender; -(ibaction)reset:(id)sender; -(ibaction) save; -(ibaction) load; @property nsinteger number; @property (assign) uilabel *label; @end
i feel simple fix.. help?!
first of all, start variable names lower case letter.
is count
uilabel
? setting text, never updating actual number
. instead of saving nsstring
, save nsnumber
instead:
[defaults setobject:@(self.number) forkey:@"number"]
make number
property:
@property nsinteger number;
you can write custom setter number property
- (void)setnumber:(nsinteger)number { _number = number; self.label.text = [nsstring stringwithformat:@"%l", _number]; // label should propery }
when load, set number that:
self.number = [[defaults objectforkey:@"number"] integervalue]
about updated question:
the warning see because property atomic
, custom setter implementing nonatomic. property declaration should @property (nonatomic) nsinteger number;
(what means outside scope of question).
you never using property. rid of int number;
, replace occurrences of number
self.number
. way, using custom setter property.
the method button should this:
-(ibaction)up:(id)sender; { self.number = self.number+1; }
updating label handled in setter number
.
also remove [defaults setobject:@(self.number) forkey:@"number"];
load
:
-(ibaction)load { nsuserdefaults *defaults = [nsuserdefaults standarduserdefaults]; self.number = [[defaults objectforkey:@"number"] integervalue]; }
Comments
Post a Comment