Iv에서이 부분을 많이 검색하여 내 특정 질문에 대한 답변을 찾을 수 없습니다. 하지만 기본적으로 내 질문은, 나는 다른보기 컨트롤러에 완료 블록을 전달하고 새보기 컨트롤러에서 다시 정의 할 수 있습니다.보기 컨트롤러 사이에 블록 전달
예를 들어보기 컨트롤러 A에는 완료 블록을 사용하여 다운로드를 수행하는 방법이 있습니다. 먼저 뷰 컨트롤러 A에 내 블록 속성을 만듭니다.
이 속성을 복사하는 것과 반대로 강하게 변경하려고 시도했지만 문제가 해결되지 않았습니다.
그러면 완료 블록을 다음과 같이 정의합니다.
self.downloadCompleteBlock = ^(NSArray *downloadItems) {
NSLOG(@"download complete in view controller A";
};
그런 다음이 완료 블록에서 전달 방법을 호출합니다. 이 완료 핸들러가 시간에 의해 호출되지 않은 경우 (다운로드가 완료되지 않은 경우)
[self download:self.downloadCompleteBlock];
그러나, 나는 내가 완료 블록이 다음 뷰 컨트롤러에 다른 무언가를 perfrom 할 것이라고이보기 컨트롤러를 둡니다. SEGUE 준비 내에서 그래서 컨트롤러 B.
[controllerB setCompletionBlock:self.downloadCompleteBlock];
그리고 뷰 컨트롤러 B에서이 방법 다음이 완료 블록이 호출 될 때 발생하는 재정의 볼이 블록을 전달하려고했습니다.
- (void)setCompletionBlock:(void(^)(NSArray *downloadItems))downloadFinishedBlock {
downloadFinishedBlock = ^(NSArray *downloadItems) {
self.collectionData = downloadItems;
[self.collectionView reloadData];
};
}
그러나, 뷰 컨트롤러 B. 누군가의 블록에 반대 다운로드가 뷰 컨트롤러 B에서 완료 블록을 가지고하는 방법을 알고 완료되면 뷰 컨트롤러에서 원래의 블록이 여전히 호출됩니다 다운로드가 완료되기 전에 해당 뷰가로드 된 경우 호출됩니다. 알리미를 사용할 수는 있지만 블록으로이 작업을 수행 할 수 있는지 궁금합니다.
감사합니다.
수행하려는 작업과 관련하여 Blocks에 특별한 것은 없습니다. 이것은 다른 변수를 설정하는 것과 정확히 같습니다. 'int'는 똑같이 행동 할 것입니다. –