我实际上是想将Apple的示例代码转换为swift。
我在devcenter中为它创建了一个app和APPID。我检查了HealthKit的权利(IAP和GC的权利是灰色的并自动检查)。
当我为其创建的配置文件下载到Xcode并且我进入Xcode中的首选项并查看我的帐户的配置文件时,我可以看到配置文件的名称加上到期日期然后有一些权利的图标。但是我使用HealthKit创建的配置文件没有任何图标,只有2个默认图标,这是正常的:
因为某些原因,应用程序因请求授权而崩溃时出现此错误:
2014-10-02 12:16:13.241 SwimFit [549:8824] - [__ NSCFConstantString _allowAuthorizationForSharingWithEntitlements:]:无法识别的选择器发送到实例0x107dc1ce0 2014-10-02 12:16:13.251 SwimFit [549:8824] ***由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [__ NSCFConstantString _allowAuthorizationForSharingWithEntitlements:]:发送无法识别的选择器例如0x107dc1ce0'
如果我尝试在设备上运行它,我会得到这个:
我创建了:
这次我做的唯一奇怪的事情,我曾经对其他应用做了不同的事情,当我点击构建/运行一点时,我让Xcode创建一个AppID,我从devcenter得到这个...我不能上传图片,但基本上所有以前的AppID都以应用程序命名。这个因为它由xcode制作而命名为:Xcode iOS App ID com santiapps SwimFit但其包标识符在以下地址是正确的:com.santiapps.SwimFit。开发配置文件也是如此:iOS团队配置文件:com.santiapps.SwimFit及其在我的构建设置中的一个。最初我有SwimFit,因为这是应用程序的名称,所以Xcode为它创建了一个自动AppID,并为它设置了ProvProfile。然后我想也许我应该创建appID和provprofile所以我手动完成并尝试将其称为SwimFit2。两者都给出了同样的错误。
我还能错过什么?
以下是代码:
//1. Add healthstore property
var healthStore: HKHealthStore? //error if not optionally unwrapped
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//2. Ask for permissions
if (HKHealthStore.isHealthDataAvailable() == true) {
self.healthStore = HKHealthStore() //needs to be var for it to work?
var writeDataTypes = self.dataTypesToWrite()
var readDataTypes = self.dataTypesToRead()
self.healthStore!.requestAuthorizationToShareTypes(writeDataTypes, readTypes: readDataTypes, completion: { (success: Bool, error: NSError!) -> Void in
if (!success) {
NSLog("You didn't allow HealthKit to access these read/write data types. In your app, try to handle this error gracefully when a user decides not to provide access. The error was: %@. If you're using a simulator, try it on a device.", error)
return
} else {
NSLog("success")
}
// Handle success in your app here.
self.setupHealthStoreForTabBarControllers()
})
}
return true
}
以下是一个屏幕截图链接:http://youtu.be/BBagkNTpfQA
答案 0 :(得分:4)
requestAuthorizationToShareTypes 方法要求您传递一组 HKBaseType 对象,在我的案例 HKQuantityType 对象中。
所以而不是:
[_healthStore requestAuthorizationToShareTypes:[NSSet setWithObject:HKQuantityTypeIdentifierBodyMassIndex]
readTypes:[NSSet setWithArray:inputDataTypes]
completion:
使用这个:
HKQuantityType* type = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMassIndex];
[_healthStore requestAuthorizationToShareTypes:[NSSet setWithObject:type]
readTypes:[NSSet setWithArray:inputDataTypes]
completion: