我正在尝试从NSObject子类提供MFMailComposeViewController。场景是:
如果我正在尝试来自NSObject子类的现在mailComposer,我正在“试图呈现模态视图控制器什么不在类层次结构中”。所以我将viewController设置为MFMailComposeViewController的委托。但是通过触摸alertView上的“发送反馈”按钮它就会消失,而我正在尝试“尝试提供模态视图控制器不在类层次结构中”的错误。我试图以这种方式记录rootViewController:
UIWindow *window = [UIApplication sharedApplication].keyWindow;
UIViewController *rootViewController = window.rootViewController;
NSLog(@"rvc - %@", [rootViewController description]);
但log向我显示rvc等于(null)。我可以直接从NSObject呈现mailController,或者如何以正确的方式完成它?
答案 0 :(得分: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
时,将feedbacker
属性设置为ACEmptyViewController
引用,然后在ACEmptyViewController中实现方法showFeedbackMailMessage
以创建并显示MFMailComposeViewController