block 是在 GridScrollView 中定义的属性:
typedef BoxView* (^RenderBlock)(NSDictionary* json, CGRect);
@interface GridScrollView : PagingScrollView
@property (nonatomic, copy) RenderBlock renderBlock;
我想这样使用它:
switch(current.tag)
{
case 1:
scrollView.renderBlock = ^(NSDictionary* json, CGRect frame)
{
//returns a boxview
}
break;
case 2:
scrollView.renderBlock = ^(NSDictionary* json, CGRect frame)
{
//returns a different boxview
}
break;
}
虽然这段代码第一次运行良好,但当它被重新分配时,我收到了 EXC_BAD_ACCESS (code=2, address=0x0) 错误。这里发生了什么?
最佳答案
由于对 block 的调用本身就是在执行对象的声明,因此请尝试在其周围添加一对额外的大括号:
case 1: {
scrollView.renderBlock = ^(NSDictionary* json, CGRect frame) {
//returns a boxview
}
}
break;
虽然不知道为什么会第一次运行然后崩溃。
关于objective-c - 重新分配 block objective-c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12101004/