Увеличение NSNumber withInt на 1 внутри блока.Сбой на определенных значениях - PullRequest
0 голосов
/ 28 августа 2011

Я пытаюсь создать универсальный «BlockController», где я устанавливаю свойство блока в SOMEBLOCK. Затем я могу вызвать этот блок в методе обновления BlockController, передавая свойства из BlockController в качестве параметров; в идеале NSArray из NSNumbers (с мыслью, что блок будет извлекать правильные значения из индексов и устанавливать их соответственно).

Мне не удалось заставить значения оставаться вне области видимости (я пытался использовать __block, но, должно быть, делал это неправильно). Теперь я изменил эксперимент на простой инкрементатор, используя IntegerBlock, который:

typedef int  (^IntegerBlock)();

Я инициализирую свой BlockController с помощью

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

return self;

}

А вот код, который я запускаю:

- (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];
}

У меня сбой, когда числовое значение достигает 13.

Я видел этот пост: NSNumber numberWithInt сбой на числах> = 13

А мой главный выглядит так:

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

}

Почему он падает? Есть ли более элегантный способ сделать это? (Надеюсь на это)

...