为什么不调用指定的初始化程序
Why isn't the designated initializer being called
根据 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 contentsOfDirectoryAtPath:error:]
等其他方法的行为符合预期。
为什么会这样?我错过了什么吗?我应该打开雷达吗?
当像 HealthKit 这样的大部分工作在进程外完成的框架向您返回错误时,很可能返回给您的错误已在另一个进程中实例化,然后通过 XPC 传递。这意味着您在流程中获得的 NSError
实际上是由 NSXPCConnection
使用 NSSecureCoding
重建的。如果您查看 NSCoding
协议,您会注意到 initWithCoder:
也是一个伪指定的初始化程序。任何实现 NSCoding
或 NSSecureCoding
的 class 都有 initWithCoder:
作为额外的指定初始化器,可以调用它来代替其他指定初始化器。
根据 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 contentsOfDirectoryAtPath:error:]
等其他方法的行为符合预期。
为什么会这样?我错过了什么吗?我应该打开雷达吗?
当像 HealthKit 这样的大部分工作在进程外完成的框架向您返回错误时,很可能返回给您的错误已在另一个进程中实例化,然后通过 XPC 传递。这意味着您在流程中获得的 NSError
实际上是由 NSXPCConnection
使用 NSSecureCoding
重建的。如果您查看 NSCoding
协议,您会注意到 initWithCoder:
也是一个伪指定的初始化程序。任何实现 NSCoding
或 NSSecureCoding
的 class 都有 initWithCoder:
作为额外的指定初始化器,可以调用它来代替其他指定初始化器。