gpt4 book ai didi

ios - 从 NSObject 呈现 MFMailComposeViewController

转载 作者:行者123 更新时间:2023-11-28 19:08:53 25 4
gpt4 key购买 nike

我正在尝试从 NSObject 子类中呈现 MFMailComposeViewController。场景是:

  • 我有一个 UIViewController 子类,用户点击一个按钮来启动一些进程
  • 这个过程的所有逻辑都从这个 ViewController 中取出到 NSObject 子类
  • 如果我显示 UIAlertView 的过程有问题
  • 此 alertView 中的一个按钮应该打开 mailComposer 以便用户向我发送反馈。

如果我尝试从 NSObject 子类中呈现 mailComposer,我会得到“尝试呈现不在类层次结构中的模态视图 Controller ”。所以我将我的 viewController 设置为 MFMailComposeViewController 的委托(delegate)。但是通过触摸 alertView 上的“发送反馈”按钮,它消失了,我得到了同样的“试图呈现不在类层次结构中的模态视图 Controller ”错误。我正在尝试以这种方式记录什么是 rootViewController:

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

但日志向我显示 rvc 等于 (null)。我可以直接从 NSObject 显示 mailController 吗,或者如何以正确的方式完成?

最佳答案

呈现 MFMailComposeViewController 的对象必须是 View 层次结构的一部分,如错误消息所示。换句话说,它必须是一个具有当前可见 View 的 View Controller 。具有所有逻辑的 NSObject 派生类应该有一个返回 UIViewController 的委托(delegate),它可以调用它来告诉它显示 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

关于ios - 从 NSObject 呈现 MFMailComposeViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17595630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com