CMMotionActivityManager 授权状态

CMMotionActivityManager authorization status

我正在尝试找出一种方法来处理 Motion 的授权状态 activity

这是我到目前为止的想法:

manager = CMMotionActivityManager() 

manager.queryActivityStartingFromDate(now, toDate: now, toQueue: NSOperationQueue.mainQueue(), 
                                                withHandler: { (activities: [CMMotionActivity]?, error: NSError?) -> Void in                

    if(error != nil){
        if(error!.code != Int(CMErrorMotionActivityNotAuthorized.rawValue)){
            print("CMErrorMotionActivityNotAuthorized")
        }else if(error!.code != Int(CMErrorMotionActivityNotEntitled.rawValue)){
            print("CMErrorMotionActivityNotEntitled")
        }else if(error!.code != Int(CMErrorMotionActivityNotAvailable.rawValue)){
            print("CMErrorMotionActivityNotAvailable")
        }
    }
})

不过有一个问题:

当我拒绝应用 activity 的运动权限时(通过 settings),我得到 CMErrorMotionActivityNotEntitled

(我相信我应该得到 CMErrorMotionActivityNotAuthorized

知道为什么吗?或者至少这样做的正确方法是什么?

也许你正在得到CMErrorMotionActivityNotAuthorized。你永远不会知道你的代码,因为你的代码不会询问你得到了什么代码。它会询问您 not 正在获取什么代码:

    if(error!.code != Int(CMErrorMotionActivityNotAuthorized.rawValue)){
        print("CMErrorMotionActivityNotAuthorized")
    }else if(error!.code != Int(CMErrorMotionActivityNotEntitled.rawValue)){
        print("CMErrorMotionActivityNotEntitled")
    }else if(error!.code != Int(CMErrorMotionActivityNotAvailable.rawValue)){
        print("CMErrorMotionActivityNotAvailable")
    }

!= 运算符表示 不是 。因此,您正在对代码 不是 的内容进行一系列检查。很难看出您如何通过提出该问题来获得任何有用的信息。询问代码 是什么 可能更有意义,这将涉及使用 == 运算符。