从邮件中打开自定义文件后调用哪种方法

Posted

技术标签:

【中文标题】从邮件中打开自定义文件后调用哪种方法【英文标题】:Which Method is Invoked Once I Open a Custom file from Mail 【发布时间】:2012-02-15 19:16:23 【问题描述】:

短版:

当我退出应用程序(主页按钮)时,UIApplicationExitsOnSuspend 设置为NO,并从邮件中打开一个自定义文件到我的应用程序中,调用UIViewController 的哪个方法?

或者,如何将我的 rootViewController 的 AppDelegate 设置为 -performSegueWithIdentifier?这段代码安全吗?

UIViewController *vc = [self.window.rootViewController.childViewControllers objectAtIndex:0];
[vc performSegueWithIdentifier:@"ChiesaSegue" sender:vc];

更多详情:

我的应用程序带有情节提要“嵌入” 一个 导航控制器 有两个不同的UIViewControllers,假设FirstVCSencondVC 连接在一起适当的 Segues。我通过设置我的 info.plist 文件将自定义文件扩展名(比如说 .q80)与我的应用程序相关联,我可以看到我的自定义文件与我的应用程序一起显示邮件中的图标。所有这些都可以正常工作。

我关闭应用程序(主页按钮),然后转到邮件,然后 "Open In.." 一个文件,应用程序打开,我正确处理 AppDelegate 中的传入 URL

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
                                      sourceApplication:(NSString *)sourceApplication 
                                             annotation:(id)annotation

现在,我希望能够在我的SecondVC 中加载这个导入 URL 的数据,但是每次我“打开..”文件时,我都会准确地返回旧数据当我按下主页按钮时,我离开它的方式。我的网址在application:openURL:sourceApplication:annotation处理后不知道调用FirstVCSecondVC哪个方法!我正在清理旧数据并在-viewDidLoad-viewWillAppear 中设置新数据。什么都没有发生!

如果您需要代码或我可能遗漏的其他详细信息,请告诉我。

【问题讨论】:

【参考方案1】:

从后台返回时完全有可能不会调用任何视图控制器 viewWillLoad/Appear/etc 方法。如果您需要基于 openURL 应用程序委托方法中的事物在视图控制器中的某些行为,那么您必须显式触发它。您可以为此目的使用 NSNotification。或者,如果您的 openURL 方法正在修改某些应用程序模型状态,您可以在模型对象上使用键值观察。

【讨论】:

经过多次尝试和错误,我有两种方法可以做到这一点。一个是通过performSegueWithIdentifier 另一个是使用NSNotificationCenter,正如你所建议的。不过我得问一下,我必须在哪里removeObserver:name:object?在dealloc?或viewDidUnload?还是两者兼而有之? 取决于您在哪里执行 addObserver。如果您在 init 中执行此操作,则需要在 dealloc 中撤消它。如果您在 viewDidLoad 中执行此操作,则需要在 viewDidUnload 中撤消它。关键是添加/删除调用必须平衡。

以上是关于从邮件中打开自定义文件后调用哪种方法的主要内容,如果未能解决你的问题,请参考以下文章

我找到了一种使用 Formspree 无需后端即可直接从网站发送电子邮件的方法。但是我不知道如何在提交时自定义消息

织梦自定义图片字段调用图片地址

Rails:从自定义验证器调用标准验证

织梦添加超过两百个自定义字段后在使用addfields调用自定义字段出错的解决方法

在实现自定义ValidationAttribute时,我应该覆盖哪种IsValid方法

在 iOS 中注册自定义文件类型