Я пытаюсь сохранить блок в переменной экземпляра в моем проекте. Вот где я объявляю переменную экземпляра:Блок, сохраненный как переменная экземпляра, становится 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
. Однако, когда мне действительно нужно запустить блок после того, как будет возвращено представление предупреждения входа, оно стало нулевым.
Я пробовал:
- Декларирование с
strong
вместоcopy
, - Установка в
self.loginCompletedTask = ^{completion();};
, - Установка переменной непосредственно, вместо того, чтобы использовать свойство (
_loginCompletedTask = ...
).
Что мне не хватает?
И вы совершенно уверены, что объект, в котором вы нуждаетесьLogLoginInForBlock: к этому времени не был отменен() ed (просто установите NSLog в его dealloc() для проверки). –
Да, потому что я регистрирую значение моего блока внутри этого объекта. Если это было нуль, ни один из этих кодов не запустится. Спасибо за ваш быстрый ответ. – aopsfan
И вы не выделили новую копию своего объекта? –