Incrementar un NSNumber withInt en 1 dentro de un bloque. Chocando con ciertos valores

Estoy intentando crear un "BlockController" genérico, donde establezco una propiedad de bloque en SOMEBLOCK. Entonces puedo llamar a ese bloque en un método de actualización BlockController, pasando propiedades del BlockController como parámetros; idealmente un NSArray de NSNumbers (con la idea de que el bloque extraiga los valores correctos de los índices y los establezca en consecuencia).

No pude hacer que los valores se mantuvieran fuera de alcance (intenté usar __block, pero no debí haberlo hecho correctamente). Ahora he cambiado el experimento a un incrementador simple usando un "IntegerBlock", que es:

typedef int  (^IntegerBlock)();

Inicializo mi BlockController con

- (id)initWithIntegerBlock:(IntegerBlock)block defaultValue:(int)defaultValue {
self = [super init];
if (self) {
    _updateBlock = Block_copy(block);
    self.number = [NSNumber numberWithInt:defaultValue];
}

return self;

}

Y aquí está el código que ejecuto:

- (void)viewDidLoad {
[super viewDidLoad];

IntegerBlock block = ^(NSNumber *n){
    int integer = [n intValue];
    integer++;
    n = [NSNumber numberWithInt:integer];
    return integer;
};

self.bc = [[BlockController alloc] initWithIntegerBlock:block defaultValue:0];
[self.bc update];

timer = [NSTimer scheduledTimerWithTimeInterval:.5 target:self selector:@selector(tick) userInfo:nil repeats:YES];
}

- (void)tick {
  [self.bc update];
}

Me estrello cuando el valor del número llega a 13.

Vi esta publicación: NSNumber numberWithInt chocando con números> = 13

Y mi principal se ve así:

int main(int argc, char *argv[])
{
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   int retVal = UIApplicationMain(argc, argv, nil, nil);
   [pool release];
   return retVal;

}

¿Por qué se estrella? ¿Existe una forma más elegante de hacer esto? (Eso espero)

preguntado el 28 de agosto de 11 a las 02:08

¿Qué hace el update método hacer? -

¿Por qué lo está convirtiendo en un número entero y luego de nuevo en una instancia de NSNumber? -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.