2

根据文档,应该始终调用指定的初始化程序,但是当我尝试在没有权限的情况下获取用户的血型时,NSError会创建一个但它的指定初始化程序(- [NSError initWithDomain:code:userInfo:])永远不会被调用。

我正在使用的代码是:

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

Obs:我知道指定的初始化程序没有被调用,因为我已经混合了它。其他方法如- [NSFileManager contentsOfDirectoryAtPath:error:]预期的那样运行。

为什么会这样?我错过了什么吗?我应该打开雷达吗?

4

1 回答 1

2

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

于 2015-10-27T21:42:23.140 回答