나는이 위임 패턴을 백만 번 했어. CatViewController의있는 viewDidLoad에서, self.delegate 이미 무기 호입니다,왜 내 대리인이 무효화됩니까?
CatViewController *vc = [[UIStoryboard storyboardWithName:@"Cat" bundle:nil] instantiateInitialViewController];
vc.delegate = self;
[self presentViewController:vc animated:YES completion:^{
DDLogWarn(@"[%@ %@] delegate: %@", THIS_FILE, THIS_METHOD, vc.delegate); //here the delegate is valid
}];
@protocol CatViewControllerDelegate;
@interface CatViewController : UIViewController
@property (weak, nonatomic) id <CatViewControllerDelegate> delegate;
@end
@protocol CatViewControllerDelegate <NSObject>
@required
- (void)catViewController:(CatViewController*)catVC didFinishWithSuccess:(BOOL)success;
@end
그러나, 물론 전무 때입니다 : 백만 한 번째 시간에 나는 무기 호 대리자를 받고 있어요 이것을 시도하십시오 :
[self.delegate catViewController:self didFinishWithSuccess:YES];
왜 catViewController의 델리게이트가 0이되는 걸까요?
어디에서나 위임자를 수정 했습니까? 그렇지 않으면 델리게이트 인스턴스를 할당 해제해야한다고 생각합니다. – KudoCC
초기 뷰 컨트롤러를 인스턴스화 한 후 위임자를 설정하기 전에 viewDidLoad가 호출된다고 생각합니다. 당신은 viewdidLoad :에 string을 위치시키고이 문자열을 setDelegate :에 놓음으로써이 이론을 테스트 할 수있다. 초대장을 너무 일찍 사용하려고 시도하기 때문에 initWithDelegate : 메서드를 만들려는 것이 좋습니다. – DerrickHo328
또한 스토리 보드에서 뷰를 가져 오면 뷰가 자동으로로드됩니다 ... 이는 ViewController에 대한 참조를 가져 오는 시점이므로 뷰가로드된다는 것을 의미하므로 viewDidLoad :가 이미 호출됩니다. – DerrickHo328