Я пытаюсь создать универсальный «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;
}
Почему он падает? Есть ли более элегантный способ сделать это? (Надеюсь на это)