菜鸟教程小白 发表于 2022-12-12 16:49:58

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(@&#34;Blood type: %@, error: %@&#34;, 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]
查看完整版本: ios - 为什么不调用指定的初始化程序