ios - 为什么不调用指定的初始化程序
<p><p>根据<a href="https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/CocoaEncyclopedia/Initialization/Initialization.html#//apple_ref/doc/uid/TP40010810-CH6" rel="noreferrer noopener nofollow">the docs</a>应始终调用指定的初始化程序,但是当我尝试在没有权限的情况下获取用户的血型时,会创建 <code>NSError</code> 但其指定的初始化程序(<code>- </code>) 永远不会被调用。</p>
<p>我使用的代码是:</p>
<pre><code>HKHealthStore *healthStore = [ init];
HKBloodTypeObject *bloodType = ;
NSLog(@"Blood type: %@, error: %@", bloodType, error);
</code></pre>
<p>Obs:我知道指定的初始化程序没有被调用,因为我已经混合了它。 <code>- </code> 等其他方法的行为与预期相同。</p>
<p>为什么会这样?我错过了什么吗?我应该打开雷达吗?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>当像 HealthKit 这样的框架在进程外完成大部分工作时,当错误返回给您时,返回给您的错误很可能已在另一个进程中实例化,然后通过 XPC 传递。这意味着您在进程中得到的 <code>NSError</code> 实际上是由 <code>NSXPCConnection</code> 使用 <code>NSSecureCoding</code> 重建的。如果您查看 <code>NSCoding</code> 协议(protocol),您会注意到 <code>initWithCoder:</code> 也是一个伪指定初始化程序。任何实现 <code>NSCoding</code> 或 <code>NSSecureCoding</code> 的类都有 <code>initWithCoder:</code> 作为额外的指定初始化程序,可以调用它来代替其他指定初始化程序。</p ></p>
<p style="font-size: 20px;">关于ios - 为什么不调用指定的初始化程序,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/33336752/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/33336752/
</a>
</p>
页:
[1]