2013-07-11 3 views
0

NSObject 서브 클래스에서 MFMailComposeViewController를 표시하려고합니다. 시나리오는 다음과 같습니다NSObject에서 MFMailComposeViewController 제시

  • 나는이 과정에 대한 모든 논리가 NSObject의 서브 클래스로이의 ViewController에서 촬영
  • 어떤 과정을 시작하는 버튼을 눌러 어떤 사용자에 UIViewController 하위이
  • 만약 과정에 문제 UIAlertView를 보여줍니다.
  • 이 alertView의 버튼 중 하나는 사용자가 나에게 피드백을 보낼 수 있도록 mailComposer를 열어야합니다.

NSObject 서브 클래스에서 현재 mailComposer를 사용하려고하면 "클래스 계층 구조에없는 모달보기 컨트롤러를 표시하려고합니다."라는 메시지가 나타납니다. 그래서 viewController를 MFMailComposeViewController의 델리게이트로 설정하고 있습니다. 하지만 alertView에 "피드백 보내기"버튼을 터치하면 사라지고 같은 "클래스 계층 구조에없는 모달보기 컨트롤러를 표시하려고합니다"오류가 발생합니다.

UIWindow *window = [UIApplication sharedApplication].keyWindow; 
    UIViewController *rootViewController = window.rootViewController; 
    NSLog(@"rvc - %@", [rootViewController description]); 

을하지만, RVC는 (null)와 같다는 것을 나에게 보여 로그 : 나는 rootViewController이 방법을 무엇 로그인을 시도하고있다. 직접 NSObject에서 mailController를 직접 표시 할 수 있습니까? 아니면 올바른 방법으로 수행 할 수 있습니까?

+0

창 참조를 얻으려면 다음 코드를 시도하십시오. AppDelegate * appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; UIViewController * rootVC = [appDelegate.window rootViewController]; – Mrunal

+1

@Mrunal UIViewController * rootVC = [UIApplication sharedApplication] .keyWindow.rootViewController;를 사용하는 것이 훨씬 쉽습니다. 앱 대표를 참여시킬 필요가 없습니다. – rmaddy

답변

4

MFMailComposeViewController을 표시하는 개체는 오류 메시지에 표시된 것처럼 뷰 계층 구조의 일부 여야합니다. 즉, 현재 볼 수있는 뷰가있는 뷰 컨트롤러 여야합니다. 모든 로직을 가진 NSObject 파생 클래스는 대리자가 UIViewController에 다시 있어야하며이 클래스가 호출하여 MFMailComposeViewController을 표시하도록 호출 할 수 있습니다. 이 패턴은 iOS 개발에 필수적이며 View Controller Programming guide에 설명되어 있습니다. 다음 예는 다음과 같습니다

@protocol ACFeedback <NSObject> 
- (void)showFeedbackMailMessage; 
@end 

@interface ACDataThing : NSObject 
@property (nonatomic, weak) id<ACFeedback> feedbacker; 
@end 

@interface ACEmptyViewController : UIViewController<ACFeedback> 
... 

당신이 ACDataThing의 인스턴스를

는 생성하고 MFMailComposeViewController을 표시하는 방법 showFeedbackMailMessage을 구현 ACEmptyViewController에 다음의 ACEmptyViewController 기준에 feedbacker 속성을 설정합니다.

+0

명확한 설명을 해 주셔서 감사합니다. – Alex