ios – 作为实例变量存储的块变为nil

我正在尝试将块存储在项目中的实例变量中.这是我声明实例变量的地方:

@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用户如此乐意提供帮助.

点赞