• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 为什么不调用指定的初始化程序

[复制链接]
菜鸟教程小白 发表于 2022-12-12 16:49:58 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

根据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:] 等其他方法的行为与预期相同。

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



Best Answer-推荐答案


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

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap