Questions tagged «uiapplicationdelegate»

7
applicationWillEnterForeground与applicationDidBecomeActive,applicationWillResignActive与applicationDidEnterBackground
当应用程序从后台唤醒并且您希望它准备好处于活动状态时,哪个合适的委托实现? applicationWillEnterForeground与applicationDidBecomeActive-有什么区别? 当应用程序要进入睡眠状态并且您想为其准备清理和保存数据时,哪个合适的委托实现? applicationWillResignActive与applicationDidEnterBackground-有什么区别? 另外,我注意到当传入的SMS或呼叫进入时,会调用applicationWillResignActive,但是用户选择单击“确定”并继续。我不希望我的应用在这些情况下采取任何措施。我只希望它保持运行而无需任何中间清理,因为用户没有退出该应用程序。因此,我认为仅在applicationDidEnterBackground中进行清理工作更有意义。 非常感谢您对最佳做法的投入,以便选择实施哪些代表来唤醒和入睡以及考虑诸如被SMS /呼叫打断等事件。 谢谢


7
处理applicationDidBecomeActive-“视图控制器如何响应应用程序变为活动状态?”
我UIApplicationDelegate在主AppDelegate.m类中具有协议,并且applicationDidBecomeActive定义了方法。 当应用程序从后台返回时,我想调用一个方法,但是该方法在另一个视图控制器中。如何检查当前在applicationDidBecomeActive方法中显示的视图控制器,然后在该控制器中调用方法?

26
通过推送通知检测应用程序是否已启动/打开
是否可以通过推送通知了解应用程序是否已启动/打开? 我想启动事件可以在这里找到: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if (launchOptions != nil) { // Launched from push notification NSDictionary *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; } } 但是,当应用程序在后台运行时,如何从推送通知中检测到它已打开?

3
终止/挂起时,重大更改位置API的行为?
这是CLLocationManager文档中的部分,描述了具有startMonitoringSignificantLocationChanges的应用行为: 如果启动此服务,并且随后终止了您的应用程序,则当新事件到来时,系统会自动将应用程序重新启动到后台。在这种情况下,传递给应用程序委托的application:didFinishLaunchingWithOptions:方法的选项字典包含键UIApplicationLaunchOptionsLocationKey,以指示由于位置事件而启动了您的应用程序。重新启动后,您仍然必须配置位置管理器对象并调用此方法以继续接收位置事件。当您重新启动位置服务时,当前事件将立即传递给您的委托。此外,甚至在您启动位置服务之前,位置管理器对象的location属性也会使用最新的位置对象进行填充。 因此,我的理解是,如果您的应用终止(并且假设您不从applicationWillTerminate调用stopMonitoringSignificantLocationChanges),您将被UIApplicationLaunchOptionsLocationKey参数唤醒:application:didFinishLaunchingWithOptions。此时,您将创建CLLocationManager,调用startMonitoringSignificantLocationChanges并在有限的时间内进行后台位置处理。因此,我对此表示满意。 上一段仅讨论终止应用程序时发生的情况,而没有建议您暂停应用程序时的操作。didFinishLaunchingWithOptions的文档说: 该应用程序在后台跟踪位置更新,已被清除,现在已重新启动。在这种情况下,词典包含一个键,该键指示由于发生新的位置事件而重新启动了该应用程序。 建议您终止应用程序后,仅在启动应用程序(由于位置更改)时才收到此呼叫。 但是,《位置感知编程指南》中有关“ 重要更改服务”的段落说明如下: 如果您使该服务保持运行状态,并且随后您的应用程序被挂起或终止,则当新的位置数据到达时,该服务会自动唤醒您的应用程序。唤醒时,您的应用程序将被置于后台,并留出少量时间来处理位置数据。因为您的应用程序在后台,所以它应该做的工作最少,并且避免任何可能阻止其在分配的时间到期之前返回的任务(例如查询网络)。否则,您的应用程序可能会终止。 这表明如果您的应用已被暂停,则您将被位置数据唤醒,但未提及您如何被唤醒: UIApplicationDelegate是否收到回调通知我正在从暂停状态恢复为后台状态? 位置管理器(在挂起应用程序时被冻干了)是否开始接收locationManager:didUpdateToLocation:fromLocation回调? 我是否只需要在didUpdateToLocation消息中实现代码即可检查应用程序状态,并在后台模式下进行最少的处理? 在撰写本文的过程中,我想我可能已经回答了我自己的问题,但是最好是由知识渊博的人来确认我的理解。

10
有条件地从AppDelegate的情节提要中的不同位置开始
我有一个故事板设置了正常的登录名和主视图控制器,后者是成功登录后用户导航到的视图控制器。我的目标是,如果身份验证成功(存储在钥匙串中),则立即显示主视图控制器;如果身份验证失败,则显示登录视图控制器。基本上,我想在AppDelegate中执行此操作: // url request & response work fine, assume success is a BOOL here // that indicates whether login was successful or not if (success) { // 'push' main view controller } else { // 'push' login view controller } 我知道方法performSegueWithIdentifier:但是该方法是UIViewController的实例方法,因此无法从AppDelegate中调用。如何使用现有的情节提要板来完成此任务? 编辑: 情节提要的初始视图控制器现在是未连接任何东西的导航控制器。我使用了setRootViewController:区别,因为MainIdentifier是UITabBarController。这就是我的代码: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { BOOL …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.