我正在制作一个包含多个使用案例的应用。它具有主要功能(通过按app图标激活),然后是主要功能的其他子集,这些子集由自定义URL方案激活。
为了解释我的问题,我应该解释一下我目前如何告诉我的应用程序表现不同。
我一直在使用: - (BOOL)应用中:didFinishLaunchingWithOptions:
从选项中抓取网址: [launchOptions objectForKey:[keyArray objectAtIndex:0]]
现在我解析urlString并获取所有的launchType参数,将它们放在NSUserDefaults中。然后我等待我的启动画面出现,然后它会告诉我的应用程序如何表现。
这一开始似乎没问题,但后来我意识到:如果我深入链接到应用程序,并且呈现功能B,那么应用程序进入后台,下次应用程序占据前景(无论是以哪种方式),它将显示功能B.
我想知道是否有人对标准练习有所了解,人们通常使用哪种方法?
FYI, 我将通过告诉我的navigationcontroller到popToRootViewController来解决这个问题 - (BOOL)应用程序:application handleOpenURL: 被称为,UNLESS didFinishLaunchingWithOptions在它之前调用,在这种情况下,只做我以前实现的。
答案 0 :(得分:2)
在我看来,对于这种方法,您需要考虑几件事情。
首先来看看UIApplicationDelegate文档。 -application:willFinishLaunchingWithOptions:
警告:
如果您的应用程序已启动以打开URL,则应检查该值 UIApplicationLaunchOptionsURLKey键并返回一个布尔值 指明您的应用是否可以实际打开该网址。你不应该 尝试在此方法中打开URL。相反,实现 应用程序:openURL:sourceApplication:annotation:应用程序中的方法 委托并使用该方法打开URL。
我们看到-application:openURL:sourceApplication:annotation:
:
如果您的应用必须启动才能打开网址,应用就会调用 应用程序:willFinishLaunchingWithOptions:和 application:didFinishLaunchingWithOptions:方法首先,然后是 这种方法。这些方法的返回值可用于防止 这种方法被称为。 (如果应用程序已在运行, 只调用此方法。)
其次,听起来你正在使用NSUserDefaults
持久存储应该是一个临时状态(如果应用程序是通过网址启动的话)。你有没有重置你在那里设置的值,或者通过网址启动应用程序,一旦留下它始终遵循该路径。
最后,用户可以合理地期望应用会从中断的地方恢复。用户将离开您的应用以响应电话,短信,通知,外部干扰,其他应用的需求以及任何其他原因。当他们恢复/重新启动应用程序(而不是通过网址)时,拒绝让他们返回他们中断的地方可能会产生糟糕的用户体验。