在块内增加一个NSNumber withInt。崩溃的某些价值观

时间:2011-08-28 02:15:08

标签: objective-c objective-c-blocks

我正在尝试创建一个通用的“BlockController”,我将块属性设置为SOMEBLOCK。然后我可以在BlockController更新方法上调用该块,从BlockController传入属性作为参数;理想情况下是NSNumber的NSArray(认为该块将从索引中提取正确的值并相应地设置它们。)

我无法让值保持更改超出范围(我尝试使用__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 crashing on numbers >= 13

我的主要看起来像:

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

}

为什么会崩溃?有没有更优雅的方式来做到这一点? (我希望如此)

0 个答案:

没有答案