块方法中的2D NSString数组用法

时间:2013-04-16 03:42:08

标签: objective-c xcode nsstring objective-c-blocks

为什么我无法使用它?

__block NSString *tableStrings[4][2];

[userValues enumerateObjectsUsingBlock:^(NSNumber *userScore, NSUInteger idx, BOOL *stop) {
        tableStrings[idx][0] = @"< 5";
        tableStrings[idx][1] = @"> 95";
}];

编译器对我"Cannot refer to declaration with an array type inside block"大喊大叫。我的印象是在变量允许完成之前表示__block。我可以使用NSString[x][x]使其工作,但我很好奇为什么不允许这样做。

1 个答案:

答案 0 :(得分:0)

Blocks无法从封闭范围访问自动或__block存储的数组变量。这只是块的限制。这是因为这两件事都需要能够复制变量。并且数组类型不可分配。

他们可以为数组创建一个特殊情况,即逐个元素地复制数组。 C ++ 11 lambdas就是这种特殊情况,因此即使数组不可赋值,它们也可以按值捕获数组。然而,这些街区人们并没有费心去做这个特例。