为什么在传递空块时输入我的if语句?

时间:2015-09-01 17:22:17

标签: objective-c if-statement objective-c-blocks

我正在尝试进行故障保护以确保永远不会尝试执行空块。为此,我使用了一个自定义属性getter,如果它不为null则返回该块,否则返回一个空块。 但是!始终输入if语句!然后,当我试图返回块时,我得到一个EXC_BAD_ACCESS

看起来没有定义块,因为它的值为0x0000000000000000,而__FuncPtrNULL,为什么这个if语句是输入

A screenshot of Xcode, showing an object called _pinPadCompletionBlock with a value of 0x0000000000000000, as the only conditional in an if statement, and the program counter on the next line. Below this is the inspector wherein __FuncPtr is NULL.

我的块声明为:

@property (nonatomic, assign) void (^pinPadCompletionBlock)(bool);

1 个答案:

答案 0 :(得分:1)

问题在于如何宣布财产。 无法将块声明为assign。只需更改您的声明即可使用copy,而不是

@property (nonatomic, copy) void (^pinPadCompletionBlock)(bool);

此外,如果你看起来比__FuncPtr更远,你会看到块内有设定值,这意味着该块实际上不是空的,尽管调试器读数。所以,代码在输入该语句时表现正常,我认为你会发现在将assign更改为copy之后,当你到达时,块的值将更明显是非空的。 if声明..