根据the docs,应始终调用指定的初始值设定项,但是当我尝试获取没有权限的用户的血型时,会创建NSError
但指定的初始化程序({{1}绝不会被调用。
我使用的代码是:
- [NSError initWithDomain:code:userInfo:]
Obs:我知道指定的初始化程序没有被调用,因为我已经调整了它。像HKHealthStore *healthStore = [[HKHealthStore alloc] init];
HKBloodTypeObject *bloodType = [healthStore bloodTypeWithError:&error];
NSLog(@"Blood type: %@, error: %@", bloodType, error);
这样的其他方法表现得如预期的那样。
为什么会这样?我错过了什么吗?我应该打开雷达吗?
答案 0 :(得分:2)
当像HealthKit这样的框架返回错误时,它会将大部分工作从流程中恢复出来,很可能是返回给你的错误已在另一个进程中实例化,然后通过XPC传递。这意味着您在流程中获得的NSError
实际上是NSXPCConnection
使用NSSecureCoding
重建的。如果查看NSCoding
协议,您会注意到initWithCoder:
也是伪指定的初始化程序。任何实现NSCoding
或NSSecureCoding
的类都有initWithCoder:
作为额外的指定初始化程序,可以调用它而不是其他指定的初始化程序。