【问题标题】:reassigning blocks objective-c重新分配块objective-c
【发布时间】:2012-08-23 22:41:01
【问题描述】:

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) 错误。这里发生了什么?

【问题讨论】:

  • 如果发生崩溃,请发布回溯。

标签: objective-c ios5 objective-c-blocks


【解决方案1】:

由于对块的调用本身正在执行对象的声明,因此请尝试在其周围添加一对额外的大括号:

case 1: {
            scrollView.renderBlock = ^(NSDictionary* json, CGRect frame) {
             //returns a boxview
            }
        }
        break;

虽然我不知道为什么它会像第一次那样运行然后崩溃。

【讨论】:

  • 为什么有效:variables in switch statements。正如 Thomas 解释的那样,这是一个范围问题。另请参阅底部的 MrZebra 的回答——我应该说问题出在对象的初始化上,而不是它的声明上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
  • 2012-08-15
  • 1970-01-01
  • 2021-06-28
相关资源
最近更新 更多