为什么不调用指定的初始值设定项

时间:2015-10-26 00:35:39

标签: ios method-overriding health-kit designated-initializer

根据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); 这样的其他方法表现得如预期的那样。

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

1 个答案:

答案 0 :(得分:2)

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