Swift 在iOS 10 beta 1中,HealthKit授权因未处理的NSException而崩溃
使用iOS 10,第一个测试版,HealthKit授权崩溃。 使用iOS 9.x运行的代码(除了我改为Swift 3) 即使是最简单的授权也会崩溃: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&
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没有打印异常的本地化描述。是的,字符串将显示给用户,您可以对其进行本地化。