프로젝트의 인스턴스 변수에 블록을 저장하려고합니다. 이 방법을 호출하여인스턴스 변수로 저장된 블록이 032가됩니다.
@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
입니다. 그러나 실제로 로그인 경고보기가 반환 된 후에 블록을 실행해야 할 때 해당 블록이 없습니다.
나는 시도했다 :
- 직접 변수를 설정하는 대신 속성 (
_loginCompletedTask = ...
)를 사용하여 - 설정
- ,
self.loginCompletedTask = ^{completion();};
로,strong
대신copy
로 선언.
무엇이 누락 되었습니까?
그리고 당신은 당신이 requireLoggedInForBlock :의 객체가 그 시간까지 de-alloc()되지 않았 음을 (NSLog를 확인하기 위해 dealloc()에 넣었을 때) 꽤 확신합니다. –
네, 그 개체 내 블록의 값을 로깅 해요. 그것이 0이 아니라면, 그 코드는 실행되지 않습니다. 빠른 회신 btw 주셔서 감사합니다. – aopsfan
그리고 개체의 새로운 복사본을 할당하지 않았습니까? –