如何防止iOS应用在更改相机权限后重置?

如何防止iOS应用在更改相机权限后重置?,ios,ios8,user-permissions,ios-camera,Ios,Ios8,User Permissions,Ios Camera,当前,当我在“设置”中更改应用程序的相机权限,然后导航回我的应用程序时,应用程序将强制刷新,我将失去在应用程序中的位置。我严格遵循以下步骤: 打开使用照相机权限的应用程序 导航到应用程序中的某个屏幕(以便以后可以看到刷新) 转到“设置”应用程序,导航到应用程序的设置,然后切换 摄像机许可 双击主页并返回应用程序。 几秒钟后,它将刷新,将您带回 第一屏 注意:我使用的是运行iOS 8.4的iPhone6 我注意到所有具有摄像头权限的应用程序都存在这种行为。我的问题是: 是否有某种方法可以防止应用程

当前,当我在“设置”中更改应用程序的相机权限,然后导航回我的应用程序时,应用程序将强制刷新,我将失去在应用程序中的位置。我严格遵循以下步骤:

  • 打开使用照相机权限的应用程序
  • 导航到应用程序中的某个屏幕(以便以后可以看到刷新)
  • 转到“设置”应用程序,导航到应用程序的设置,然后切换 摄像机许可
  • 双击主页并返回应用程序。 几秒钟后,它将刷新,将您带回 第一屏
  • 注意:我使用的是运行iOS 8.4的iPhone6

    我注意到所有具有摄像头权限的应用程序都存在这种行为。我的问题是: 是否有某种方法可以防止应用程序在更改相机权限后刷新/重新启动(恢复时)?例如,在切换位置服务时,这似乎不会发生,从可用性角度来看,这很可怕


    用户场景:如果用户深入到您的应用程序中,然后需要更改摄像头权限(因为他们说他们上次无意中没有单击),则返回时将被迫导航回该屏幕。这对于试图向你出售某些东西或为你注册一个新帐户的应用程序来说尤其有害。他们可能会尝试引入一项新功能,您可以使用相机拍摄个人资料照片或扫描您的信用卡。由于用户不知道此功能,他们以前可能拒绝摄像头访问,但现在想启用它。在尝试重新启用后,他们返回到您的应用程序,发现他们必须再次花费5分钟以上的时间注册/购买!在那之后,即使是我也可能会放弃。

    我确信没有其他方法可以阻止重新启动应用程序。实际上,在切换设置时,您将收到一条SIGKILL消息,但没有崩溃日志。请参阅下面的链接-

    防止这种情况发生的唯一方法是在终止应用程序时保存应用程序的上一个状态

    • 将当前数据存储到applicationWillTerminate:method和
    • 在ApplicationWillEnter前台还原保存的数据:
    例如-@SignUpViewController register For UIApplicationWillTerminateNotification将在应用程序即将终止时触发。在那里存储用户信息

    - (void)viewDidLoad
    {
     [super viewDidLoad];
     [[NSNotificationCenter defaultCenter] addObserver:self
        selector:@selector(applicationWillTerminate:)
        name: UIApplicationWillTerminateNotification object:nil];
    }
    
    - (void)applicationWillTerminate:(NSNotification *)notification
    {
     // store your data here
    }
    

    希望这将对您有所帮助:)

    公认的答案是正确的,但在当前版本的iOS(9.2)中,解决方案似乎不起作用-应用程序似乎在启动UIApplicationWillTerminateNotification之前终止。但是,通过侦听UIApplicationIdentinterBackgroundNotification,也可以实现同样的效果。e、 g在Swift中,将其放入viewDidLoad()中

    并具有如下功能:

    func enteringBackground(sender:AnyObject){
        // Save application state here
    }
    

    applicationWillTerminate未调用,即使通知是您建议的加载项viewDidLoad,您对此有何想法?请帮帮我,这很有帮助。您能把保存/恢复状态代码也放在这个答案中吗?实际上它被称为
    applicationidenterdbackground
    func enteringBackground(sender:AnyObject){
        // Save application state here
    }