2014-10-25 2 views
2

나는이 위임 패턴을 백만 번 했어. 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이되는 걸까요?

+0

어디에서나 위임자를 수정 했습니까? 그렇지 않으면 델리게이트 인스턴스를 할당 해제해야한다고 생각합니다. – KudoCC

+0

초기 뷰 컨트롤러를 인스턴스화 한 후 위임자를 설정하기 전에 viewDidLoad가 호출된다고 생각합니다. 당신은 viewdidLoad :에 string을 위치시키고이 문자열을 setDelegate :에 놓음으로써이 이론을 테스트 할 수있다. 초대장을 너무 일찍 사용하려고 시도하기 때문에 initWithDelegate : 메서드를 만들려는 것이 좋습니다. – DerrickHo328

+0

또한 스토리 보드에서 뷰를 가져 오면 뷰가 자동으로로드됩니다 ... 이는 ViewController에 대한 참조를 가져 오는 시점이므로 뷰가로드된다는 것을 의미하므로 viewDidLoad :가 이미 호출됩니다. – DerrickHo328

답변

3

문제는 CatViewController가 스토리 보드의 탐색 컨트롤러에 포함 된 것이 었습니다. 그러므로 instantiateInitialViewController는 CatViewController를 반환하지 않았습니다. 모든 것이 화면에 잘 나타났습니다. 수정본 :

UINavigationController *navVC = [[UIStoryboard storyboardWithName:@"Cat" bundle:nil] instantiateInitialViewController]; 
CatViewController *catVC = navVC.viewControllers[0]; 
catVC.delegate = self; 
2

당신은이 :이 시간 새로운 뷰 컨트롤러의 viewDidLoad에 의해 삭제되고 있습니다 무엇이든 self

vc.delegate = self; 

가 호출됩니다. 이 이론을 테스트하려면 해당 클래스에 dealloc 메서드를 넣고 중단 점을 넣습니다.

+0

나는 이것을했다. dealloc이 CatViewController를 생성하는 클래스에서 호출되지 않는다는 것을 확인할 수 있습니다. – soleil

-2

대신 위임자를 선언하려고 했습니까?

@property (unsafe_unretained, nonatomic) id <CatViewControllerDelegate> delegate; 
+0

왜 그게 더 좋을까요? –

관련 문제