0

기본적으로 저는 앱 시작시로드되는 viewController가 있습니다. 이 VC에서 userdata가 있는지 여부에 따라 로그인이있는 ModalView를 제공합니다. 사용자가 로그인 한 후 modalView를 닫을 수는 있지만 데이터가있는 테이블을 채울 오프너에서 메소드를 호출하려고합니다. 오프너보기에있는 ModalView에서 메소드 호출

나는 ..

제안 내가

[self.parentViewController loadInitialData]; 
[self.dismissModalViewControllerAnimated:YES]; 

하지만이 작동하지 않는 등의 일을 할 수있는 modalView에서 생각?

+0

이 loadInitialData입니까? 제대로 구현되면 문제가 없어야합니다. 작동하지 않는 것은 무엇입니까? 너 뭐 해봤 니? 도움이 필요한 정보가 더 필요합니다. –

답변

5

self.parentViewController가 "UIViewController"유형이고 -loadInitialData 메서드가 UIViewController에 없기 때문에 문제가 발생합니다. 이 문제를 해결하는 가장 일반적인 방법은 가장 쉽고 최소의 "올바른"방법에서부터 가장 복잡하고 가장 올바른 방법까지입니다.

1) 먼저 self.parentViewController를 자신의 유형으로 변환해야합니다. 부모보기 컨트롤러. 같은 뭔가 :

MyParentViewController *parentVC = (MyParentViewController*)self.parentViewController; 
[parentVC loadInitialData]; 

2) 당신은 명시 적으로 부모 뷰 컨트롤러에 대한 참조를 유지 모달 뷰 컨트롤러에 속성을 추가 한 다음 loadInitialData가 그 일을 호출 할 수 있습니다.

@interface MyModalViewController : UIViewController { 
    MyParentViewController *myParentViewController; 
} 

@property (nonatomic, retain) MyParentViewController *myParentViewController; 

그런 다음 호출 할 수 있습니다

[self.myParentViewController loadInitialData]; 

3)가 위임 프로토콜을 작성하는 것입니다 할 가장 복잡하지만 가장 올바른 방법은, 당신의 ParentViewController이 프로토콜을 구현하고 모달 뷰를 가지고 있습니다 컨트롤러는 델리게이트에 대한 참조를 유지하고 그런 식으로 호출합니다. 예 :

@protocol ManageDataDelegate 

- (void) loadInitialData; 

@end 


@interface MyParentViewController : UIViewController <ManageDataDelegate> { ... 


@interface MyModalViewController : UIViewController { 
    id<ManageDataDelegate> delegate; 
} 

@property (nonatomic, assign) id<ManageDataDelegate> delegate; 

모달보기 컨트롤러를 표시 할 때 위임자를 설정하면됩니다. 당신의 MyParentViewController에서 :

MyModalViewController *vc = [[MyModalViewController alloc] init]; 
vc.delegate = self; 
[self presentModalViewController:vc]; 

는 그런 다음 모달 뷰 컨트롤러에서 당신과 같이 다시 호출 할 수 방법 당신 :

[self.delegate loadInitialData]; 
+0

델리게이트 사용은 클래스 종속성을 분리하는 최상의 전략입니다. iTunes U에서 iOS의 스탠포드 대학에서 제공 한 최근 강의 중 하나를 참조하십시오. –

+0

감사합니다. 그것은 나를 위해 그것을 분류했다. – Critter

+0

@David - 나는 그들을 보일 것이다. 머리를 주셔서 감사합니다 ... – Critter