这是导致上述错误的我的代码,我看到其他人提出了类似的问题,但唯一的答案并没有完全解决我的问题,因为我怀疑这个问题应该有更好的答案。
CGPoint pointArray[lines.count];
[lines enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%f", pointArray[idx].y);
}];
答案 0 :(得分:0)
如Cannot refer to declaration with a variably modified type inside block及其链接的重复How to write into an array from a dispatch_apply (GCD) loop?所示,您无法访问Objective-C块内的C数组。
一种解决方案是使用CGPoint
将NSArray
个对象存储在NSValue
中。
NSArray *pointArray = @[
[NSValue valueWithCGPoint:CGPointMake(0, 0)],
[NSValue valueWithCGPoint:CGPointMake(10, 20)]
];
在pointArray
个CGPoint
个实例之后,您的区块变为:
[lines enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%f", pointArray[idx].CGPointValue.y);
}];