iphone - how do I set the value of an NSNumber variable (without creating a new object) in objective-c -


how set value of nsnumber variable (without creating new object) in objective-c?

background

  • i'm using core data , have managed object has nsnumber (dynamic property)
  • passing (by reference) method update it
  • not sure how update it? if allocate new nsnumber things don't work, guess makes sense it's got pointer different object not core data object (i guess)

an nsnumber object isn't mutable. means way change property containing nsnumber give new nsnumber. want, have 3 options:

1. pass core data object method , have directly set property.

- (void)updatenumberof:(mycoredataobject *)theobject {     nsnumber *newnumber = ...; // create new number     theobject.number = newnumber; } 

called [self updatenumberof:thecoredataobject];

2. have update method return new nsnumber , update in caller.

- (nsnumber *)updatenumber:(nsnumber *)oldnumber {     nsnumber *newnumber = ...; // create new number     return newnumber; } 

called using:

nsnumber *thenumber = thecoredataobject.number; thenumber = [self updatenumber:thenumber]; thecoredataobject.number = thenumber; 

3. pass pointer number variable , update in caller (i suggest on option 2 if need return else).

- (void)updatenumber:(nsnumber **)numberpointer {     if(!numberpointer) return; // or possibly throw error     nsnumber *oldnumber = *numberpointer;     nsnumber *newnumber = ...; // create new number     *numberpointer = newnumber; } 

called using:

nsnumber *thenumber = thecoredataobject.number; [self updatenumber:&thenumber]; thecoredataobject.number = thenumber; 

i did not bother memory management in of these examples. make sure release/autorelease objects appropriately.

4. (from greg's comment) similar option 1, passes key update method more portable.

- (void)updatenumberof:(id)theobject forkey:(nsstring *)key {     nsnumber *oldnumber = [theobject valueforkey:key];     nsnumber *newnumber = ...; // create new number     [theobject setvalue:newnumber forkey:key]; } 

called [self updatenumberof:thecoredataobject forkey:@"number"];


Comments

Popular posts from this blog

c# - how to write client side events functions for the combobox items -

exception - Python, pyPdf OCR error: pyPdf.utils.PdfReadError: EOF marker not found -