Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 在iOS 10 beta 1中,HealthKit授权因未处理的NSException而崩溃_Swift_Healthkit_Ios10 - Fatal编程技术网

Swift 在iOS 10 beta 1中,HealthKit授权因未处理的NSException而崩溃

Swift 在iOS 10 beta 1中,HealthKit授权因未处理的NSException而崩溃,swift,healthkit,ios10,Swift,Healthkit,Ios10,使用iOS 10,第一个测试版,HealthKit授权崩溃。 使用iOS 9.x运行的代码(除了我改为Swift 3) 即使是最简单的授权也会崩溃: func authorizeHealthKit(_ completion: ((success:Bool, error:NSError?) -> Void)!) { // 1. Set the types you want to read from HK Store var healthKitTypesToRead: Set&

使用iOS 10,第一个测试版,HealthKit授权崩溃。 使用iOS 9.x运行的代码(除了我改为Swift 3)

即使是最简单的授权也会崩溃:

func authorizeHealthKit(_ completion: ((success:Bool, error:NSError?) -> Void)!)
{
    // 1. Set the types you want to read from HK Store
    var healthKitTypesToRead: Set<HKObjectType> = Set<HKObjectType>()
    healthKitTypesToRead.insert(HKObjectType.characteristicType(forIdentifier: HKCharacteristicTypeIdentifier.dateOfBirth)!)

    // 2. Set the types you want to write to HK Store
    var healthKitTypesToWrite: Set<HKSampleType> = Set<HKSampleType>()

    // 3. If the store is not available (for instance, iPad) return an error and don't go on.
    if !HKHealthStore.isHealthDataAvailable()
    {
        // do some error handling
        return;
    }


    // 4.  Request HealthKit authorization

    // iOS 10 beta 1 throws NSException without declaring it:

    healthStore.requestAuthorization(toShare: healthKitTypesToWrite, read: healthKitTypesToRead) { (success: Bool, error: NSError?) -> Void in
        // do stuff
    }
}
func authorizeHealthKit(uu完成:((成功:Bool,错误:NSError?->Void)!)
{
//1.设置要从HK Store读取的类型
var healthKitTypesToRead:Set=Set()
healthKitTypesToRead.insert(HKObjectType.characteristicType(用于标识符:HKCharacteristicTypeIdentifier.dateOfBirth)!)
//2.设置要写入HK Store的类型
var healthKitTypesToWrite:Set=Set()
//3.如果商店不可用(例如,iPad),则返回一个错误,不要继续。
if!HKHealthStore.isHealthDataAvailable()
{
//做一些错误处理
返回;
}
//4.请求HealthKit授权
//iOS 10 beta 1在未声明的情况下引发NSException:
requestAuthorization(toShare:healthKitTypesToWrite,读取:healthKitTypesToRead){(成功:Bool,错误:NSError?)->Void in
//做事
}
}
这是在iOS 10 beta 1的iPhone SE模拟器中崩溃的最简单代码

异常消息是

“libc++abi.dylib:以类型为的未捕获异常终止 N例外”

是否有可能授权根本不适用于iOS 10 beta 1? 这是XCode 8 beta 1


工作原理:我使用Xcode 7.3和iOS 9.3 target构建的HelthKit应用程序在硬件iPhone 5上的iOS 10 beta 1下运行良好。

异常消息应该会提示问题所在。从iOS 10开始,描述应用程序为什么希望访问用户HealthKit数据的使用字符串是必需的。您可以在应用程序的Info.plist中指定它们。

来自Apple文档:

在iOS 10.0上或之后链接的iOS应用程序必须在其Info.plist文件中包含其需要访问的数据类型的使用说明码,否则将崩溃。要特别访问和更新HealthKit数据,它必须分别包括
NSHealthShareUsageDescription
NSHealthUpdateUsageDescription


抱歉,我不知道解决方案是什么,但我只是想回应一下,我在目标C中遇到了同样的问题。在手表模拟器上似乎可以正常工作,但不幸的是,访问手表上的健康数据需要首先在iPhone应用程序上获得授权。我正在使用iPhone应用程序模拟器,我也遇到了同样的问题。这可能是beta 1的bug吗?尽管发行说明中没有提到。您是否设法解决了您的问题?在最近的一次测试(Beta 6)中,我在
healthStore中的完成处理程序的括号中放入一个内部错误。requestAuthorization
是的,接受的答案是解决方案顺便说一句,还有其他原因导致相同的崩溃:例如,如果你试图获得练习分钟的写入权限,你会得到完全相同的崩溃,没有任何文本。谢谢你的提示。编译时没有消息,如果需要,这将是最好的,异常消息是“libc++abi.dylib:以NSException类型的未捕获异常终止”,当我尝试捕获异常时,编译器说捕获代码永远无法到达。该方法的NSError return参数从未使用过。此文本是否显示给最终用户,这意味着必须翻译plist,还是此文本供应用程序审阅者使用?看起来SDK没有打印异常的本地化描述。是的,字符串将显示给用户,您可以对其进行本地化。