objective-c - 重新分配 block objective-c

标签 objective-c ios5 objective-c-blocks

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/

相关文章:

ios - 我如何在 UILabel/UITextView 中放置多点触摸,如 facebook 标题?

ios - 直接从 UIButton 操作添加 subview ,而无需调用方法

objective-c - NSString 地址问题

animation - iOS5 CGAffineTransformMakeRotation 在我第二次执行时不起作用?

iphone - 首次使用前 UISearchBar 大小不一致?

iphone - cocoa 错误 : 516 while making writable copy of the SQLite database

带有 block 的 Objective-C 调度方法将在 *caller* 线程上运行

objective-c - ARC 中的递归 block 和保留循环

ios - Objective-C block : How to set an object to nil which uses block-based callback mechanism?

ios - popoverContentSize 在 iOS 8 中没有响应