0

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

为了解释我的问题,我应该解释一下我目前如何告诉我的应用程序表现不同。

我一直在使用:-(BOOL)应用程序:didFinishLaunchingWithOptions:

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

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

起初这似乎没问题,但后来我意识到:如果我深度链接到应用程序,并呈现功能 B,然后应用程序进入后台,下次应用程序进入前台(无论哪种方式) ,它将显示功能 B。

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

仅供参考,我将尝试通过告诉我的导航控制器来解决这个问题.

4

1 回答 1

2

在我看来,对于这种方法,您需要考虑几件事。

首先看一下 UIApplicationDelegate 文档。-application:willFinishLaunchingWithOptions:警告:

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

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

如果您的应用必须启动才能打开 URL,则应用首先调用 application:willFinishLaunchingWithOptions: 和 application:didFinishLaunchingWithOptions: 方法,然后是此方法。这些方法的返回值可用于防止调用此方法。(如果应用程序已经在运行,则只调用此方法。

其次,听起来您正在使用NSUserDefaults持久存储应该是临时状态的内容(如果应用程序是通过 url 启动的)。您是否曾经重置过您在此处设置的值,或者是否通过 url 启动应用程序,一旦让它始终沿着该路径卡住。

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

于 2012-10-13T03:01:56.473 回答