Iphone 具有自定义应用程序行为的自定义URL方案

Iphone 具有自定义应用程序行为的自定义URL方案,iphone,ios5,url-scheme,deep-linking,appdelegate,Iphone,Ios5,Url Scheme,Deep Linking,Appdelegate,我正在制作一个有多个用例的应用程序。它具有主要功能(通过按下应用程序图标激活),然后是由自定义URL方案激活的主要功能的其他子集 为了解释我的问题,我应该解释一下我目前是如何告诉我的应用程序以不同的方式运行的 我一直在使用: -(BOOL)应用程序:使用选项完成启动: 从选项中获取url: [launchOptions objectForKey:[keyArray objectAtIndex:0]] 现在,我解析该urlString并获取所有launchType参数,将它们放在NSUserDef

我正在制作一个有多个用例的应用程序。它具有主要功能(通过按下应用程序图标激活),然后是由自定义URL方案激活的主要功能的其他子集

为了解释我的问题,我应该解释一下我目前是如何告诉我的应用程序以不同的方式运行的

我一直在使用: -(BOOL)应用程序:使用选项完成启动:

从选项中获取url: [launchOptions objectForKey:[keyArray objectAtIndex:0]]

现在,我解析该urlString并获取所有launchType参数,将它们放在NSUserDefaults中。然后我等待我的启动屏幕出现,然后它会告诉我的应用程序如何操作

起初这看起来还可以,但后来我意识到:如果我深入链接到应用程序,并显示功能B,那么应用程序将进入后台,下次应用程序进入前台时(无论以何种方式),它将显示功能B

我想知道是否有人对标准实践有想法,人们通常使用什么方法

仅供参考, 我将试图通过告诉我的导航控制器popToRootViewController来解决这个问题 -(BOOL)应用程序:应用程序句柄
被调用,除非在调用之前调用了FixFixIsDebug选项,在这种情况下,只需执行我以前执行的。

< P> >我想,有两件事让您考虑这个方法。

首先看一下UIApplicationLegate文档<代码>-应用程序:将使用选项完成启动:警告:

如果启动应用程序是为了打开URL,则应检查该值 并返回一个布尔值 指示您的应用程序是否可以实际打开URL。你不应该 尝试用此方法打开URL。相反,实施 应用程序:应用程序中的openURL:sourceApplication:annotation:method 委托并使用该方法打开URL

查看
-application:openURL:sourceApplication:annotation:
我们看到:

如果必须启动应用程序才能打开URL,应用程序将调用 应用程序:将使用选项完成启动:和 应用程序:didFinishLaunchingWithOptions:首先是方法,然后是 这个方法。这些方法的返回值可用于防止 此方法无法被调用。(如果应用程序已在运行, 仅调用此方法。

其次,听起来像是在使用
NSUserDefaults
持久存储应该是临时状态的内容(如果应用程序是通过url启动的或不是)。你是否曾经重置你在那里设置的值,或者一旦通过url启动应用程序,应用程序就会一直沿着该路径运行

最后,用户有一个合理的期望,即应用程序将恢复到他们停止的地方。用户将离开你的应用程序来响应电话、短信、通知、外部干扰、其他应用程序的需求以及任何其他原因。当他们恢复/重新启动应用程序(而不是通过url)时,拒绝让他们返回到中断的位置可能会产生糟糕的用户体验