ios - 为什么指定的初始化器没有被调用

标签 ios overriding healthkit designated-initializer

根据the docs应该始终调用指定的初始值设定项,但是,当我尝试在没有权限的情况下获取用户的血型时,会创建 NSError 但其指定的初始值设定项 (- [NSError initWithDomain:code:userInfo :]) 永远不会被调用。

我使用的代码是:

HKHealthStore *healthStore = [[HKHealthStore alloc] init];
HKBloodTypeObject *bloodType = [healthStore bloodTypeWithError:&error];
NSLog(@"Blood type: %@, error: %@", bloodType, error);

Obs:我知道指定的初始化程序没有被调用,因为我已经对其进行了调整。其他方法如 - [NSFileManager contentOfDirectoryAtPath:error:] 的行为符合预期。

为什么会发生这种情况?我错过了什么吗?我应该打开雷达吗?

最佳答案

当像 HealthKit 这样的框架在进程外完成大部分工作时,将错误返回给您时,返回给您的错误很可能已在另一个进程中实例化,然后通过 XPC 传递。这意味着您在进程中获得的 NSError 实际上是由 NSXPCConnection 使用 NSSecureCoding 重建的。如果您查看 NSCoding 协议(protocol),您会注意到 initWithCoder: 也是一个伪指定的初始值设定项。任何实现 NSCodingNSSecureCoding 的类都有 initWithCoder: 作为附加的指定初始值设定项,可以调用它来代替其他指定初始值设定项。

关于ios - 为什么指定的初始化器没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33336752/

相关文章:

ios - HealthKit 数据重复问题

ios - HealthKit 步骤延迟

c# - 可以在 C# 中重写静态方法吗?

java注释不调用重写的方法

ios - 如何在 "@"位置改变颜色

ios - 使用分段控件切换tableView

html - 有没有办法从标签中删除所有格式 - 并应用已经是 "in force"的任何样式?

ios - 如何从查询中获取信息

iOS DispatchQueue 在后台线程缓存的安全性

ios - 多个 ASIHTTP 请求