我正在尝试将块存储在项目中的实例变量中.这是我声明实例变量的地方:
@property (nonatomic, copy)void (^loginCompletedTask)();
我通过调用此方法来分配变量:
- (void)requireLoggedInForBlock:(void (^)())completion {
self.loginCompletedTask = completion;
// Display an alert view that requires username and password input
}
在此方法的第一行之后,self.loginCompletedTask为非零并且在类型为NSMallocBlock的调试器中登录.但是,当我确实需要在返回登录警报视图后运行块时,它已变为零.
我试过了:
>用强而不是复制来声明,
>设置为self.loginCompletedTask = ^ {completion();};,
>直接设置变量,而不是使用属性(_loginCompletedTask = …).
我错过了什么?
最佳答案 事实证明它与错误地存储块无关.我实际上创建了一个与存储块相同的类的新对象,但忘记复制实际的块.因此,被记录self.loginCompletedBlock值的被击中的方法正被另一个对象接收,而不是分配变量开始的对象.
感谢所有人的帮助,我总是惊讶于SO用户如此乐意提供帮助.