iphone objective-c ios nsnumber

iphone - ¿Cómo establezco el valor de una variable NSNumber(sin crear un nuevo objeto) en object-c?



objective-c ios (1)

Un objeto NSNumber no es mutable. Esto significa que la única forma de cambiar una propiedad que contiene un NSNumber es asignarle un nuevo NSNumber. Para hacer lo que quieras, tienes tres opciones:

1. Pase el objeto Core Data al método y pídale que establezca directamente la propiedad.

- (void)updateNumberOf:(MyCoreDataObject *)theObject { NSNumber *newNumber = ...; // create new number theObject.number = newNumber; }

Llamado como [self updateNumberOf:theCoreDataObject];

2. Haga que el método de actualización devuelva un NSNumber nuevo y lo actualice en la persona que llama.

- (NSNumber *)updateNumber:(NSNumber *)oldNumber { NSNumber *newNumber = ...; // create new number return newNumber; }

Llamado usando:

NSNumber *theNumber = theCoreDataObject.number; theNumber = [self updateNumber:theNumber]; theCoreDataObject.number = theNumber;

3. Pase el puntero a una variable numérica y actualícelo en la persona que llama (solo sugeriría esto sobre la opción 2 si necesita devolver algo más).

- (void)updateNumber:(NSNumber **)numberPointer { if(!numberPointer) return; // or possibly throw an error NSNumber *oldNumber = *numberPointer; NSNumber *newNumber = ...; // create new number *numberPointer = newNumber; }

Llamado usando:

NSNumber *theNumber = theCoreDataObject.number; [self updateNumber:&theNumber]; theCoreDataObject.number = theNumber;

No me molesté con la administración de la memoria en ninguno de estos ejemplos. Asegúrate de liberar / autorelease los objetos apropiadamente.

4. (del comentario de Greg) Similar a la opción 1, pero pasa la clave al método de actualización para que sea más portátil.

- (void)updateNumberOf:(id)theObject forKey:(NSString *)key { NSNumber *oldNumber = [theObject valueForKey:key]; NSNumber *newNumber = ...; // create new number [theObject setValue:newNumber forKey:key]; }

Llamado como [self updateNumberOf:theCoreDataObject forKey:@"number"];

¿Cómo establezco el valor de una variable NSNumber (sin crear un nuevo objeto) en object-c?

Fondo

  • Estoy usando Core Data y tengo un objeto administrado que tiene un NSNumber (propiedad dinámica)
  • pasando (por referencia) esto a otro método que lo actualizará
  • ¿No estás seguro de cómo actualizarlo? si le asigno otro NSNumber nuevo, las cosas no funcionan, lo que creo que tiene sentido, entonces tiene un puntero a un objeto diferente, no al objeto de datos central (supongo)