菜鸟教程小白 发表于 2022-12-13 14:11:09

ios - CNContact UnifiedContact 与 Mac OS Sierra 中断


                                            <p><p>自从我切换到 Mac OS Sierra 和 XCode 8 后,使用unifiedContactsMatchingPredicate:keysToFetch:error: 或unifiedContactWithIdentifier:keysToFetch:error: 的代码不再正确运行。</p>

<p>返回错误:错误域:CNErrorDomain 代码:200
说明记录不存在,或者记录更新失败。</p>

<p>所有代码在 Mac OS 10.11 和 XCode 7 上都可以正常工作,授予对通讯簿的读取权限,并且我正在寻找的 CNContact 确实存在。</p>

<p>我在 iOS 10 上遇到了相同的行为,我通过在 plist 文件中添加一个 NSContactsUsageDescription 键来解决这个问题(在 iOS 10 之前这是可选的,但不再是)。我在我的 mac OS plist 文件中做了同样的事情,但没有运气。</p>

<p>任何线索发生了什么以及在哪里搜索?</p>

<p>编辑:使用一些代码:</p>

<p>我写了 2 个新项目,一个用 Objective-C,一个用 Swift。它们都给出相同的结果。</p>

<pre><code>- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application

CNContactStore*contactStore   = [ init] ;
NSPredicate   *predicate      = ;
NSError         *error          = nil ;

NSArray         *keys         = @[
                                    CNContactGivenNameKey,
                                    CNContactFamilyNameKey
                                    ] ;

NSArray         *contacts       = [contactStore unifiedContactsMatchingPredicate:predicate
                                                                     keysToFetch:keys
                                                                           error:&amp;error] ;
NSLog(@&#34;%d contacts found : %@&#34;,,contacts) ;
</code></pre>

<p>}</p>

<p>和</p>

<pre><code>func applicationDidFinishLaunching(_ aNotification: Notification) {
    // Insert code here to initialize your application

    let contactStore    = CNContactStore()
    let predicate       = CNContact.predicateForContacts(matchingName: &#34;TEST_CONTACT&#34;)


    let keys            =

    do
    {
      let contacts      = try contactStore.unifiedContacts(matching: predicate,
                                                               keysToFetch: keys as )
      print(contacts)
    }
    catch
    {
      print(&#34;caught an error&#34;)
    }

}
</code></pre>

<p>结果显示在控制台中:</p>

<pre><code>2016-09-27 17:19:48.797029 TestCNContact.swift __42-_block_invoke_2 (208) &#34;Error returned from daemon: &lt;private&gt;&#34;
</code></pre>

<p>2016-09-27 17:19:48.798105 TestCNContact.swift [核心] __42-_block_invoke_2 (208) “从守护进程返回错误:”
[]
2016-09-27 17:19:49.631876 TestCNContact.swift [错误] 警告:动态访问器在解析类“ABCDInfo”上的选择器“uniqueId”时未能找到实体 ABCDInfo 的“uniqueId”的 @property 实现。你还记得在@implementation 中声明它@dynamic 或@synthesized 吗?
2016-09-27 17:19:52.637627 TestCNContact.swift [错误] 警告:动态访问器在解析类“ABCDAddressBookSource”上的选择器“serialNumber”时未能找到实体 ABCDAddressBookSource 的“serialNumber”的 @property 实现。你还记得在@implementation 中声明它@dynamic 或@synthesized 吗?
2016-09-27 17:19:52.739108 TestCNContact.swift [错误] 警告:动态访问器在解析类“ABCDAddressBookSource”上的选择器“uniqueId”时无法找到实体 ABCDAddressBookSource 的“uniqueId”的 @property 实现。你还记得在@implementation 中声明它@dynamic 或@synthesized 吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我找到了解决办法!!!</p>

<p>Apple 用以下声明回答了我的雷达:
“Contacts 现在要求使用它的任何人都必须使用 uses-contacts 权利进行代码签名。”</p>

<p>所以我所做的就是对我的应用程序进行沙盒处理,并授予“联系人访问”权限。一切都恢复正常了。</p>

<p> <a href="/image/LmNuG.jpg" rel="noreferrer noopener nofollow"><img src="/image/LmNuG.jpg" alt="enter image description here"/></a> </p>

<p>Apple 似乎将不再接受非沙盒应用程序来访问联系人(或位置或日历)。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - CNContact UnifiedContact 与 Mac OS Sierra 中断,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/39688021/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/39688021/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - CNContact UnifiedContact 与 Mac OS Sierra 中断