菜鸟教程小白 发表于 2022-12-13 16:44:45

ios - 如何使用带有 CNContactPickerViewController 的一组电话号码过滤联系人?


                                            <p><p>我尝试使用一组现有电话号码从通讯录中过滤一些联系人。 <code>CNContactPickerViewController</code> 当这些联系人的电话号码与现有电话号码相匹配时,应禁止选择这些联系人。</p>

<p>我需要使用电话号码作为过滤器,因为这些电话号码可能来自其他应用平台。并且该服务不应允许用户使用已存在的相同电话号码的联系人。我不想为这个快速操作创建自己的联系人选择器。</p>

<p>这是我迄今为止尝试过的。</p>

<pre><code>NSArray&lt;CNPhoneNumber *&gt; *existingPhoneNumbers = @[@&#34;1111&#34;, @&#34;2222&#34;];

CNContactPickerViewController *contactPicker = [ init];
contactPicker.delegate = self;
contactPicker.displayedPropertyKeys = @[CNContactNamePrefixKey,
                                        CNContactGivenNameKey,
                                        CNContactFamilyNameKey,
                                        CNContactOrganizationNameKey,
                                        CNContactPhoneNumbersKey];

NSPredicate *filterPredicate = ;

contactPicker.predicateForEnablingContact = predicates;
</code></pre>

<p>错误信息:</p>

<pre><code> Error when showing picker: Error Domain=CNErrorDomain Code=300 &#34;(null)&#34; UserInfo={CNValidationErrors=(
&#34;Error Domain=CNErrorDomain Code=400 \&#34;Invalid Predicate\&#34; UserInfo={CNKeyPaths=(\n    \&#34;phoneNumbers.value.stringValue\&#34;\n), NSLocalizedDescription=Invalid Predicate, NSLocalizedFailureReason=The operation couldn&#39;t be completed because its predicate is invalid.}&#34;)}
</code></pre>

<p>使用 <code>SUBQUERY</code> 仍然无法正常工作。</p>

<pre><code>NSPredicate *filterPredicate = ;
</code></pre>

<p>错误信息:</p>

<pre><code> Error when showing picker: Error Domain=CNErrorDomain Code=300 &#34;(null)&#34; UserInfo={CNValidationErrors=(
&#34;Error Domain=CNErrorDomain Code=400 \&#34;Invalid Predicate\&#34; UserInfo={CNKeyPaths=(\n    \&#34;value.stringValue\&#34;\n), NSLocalizedDescription=Invalid Predicate, NSLocalizedFailureReason=The operation couldn&#39;t be completed because its predicate is invalid.}&#34;)}
</code></pre>

<p>还尝试了 <code>predicateWithBlock:</code>。它根本不支持基于 block 的谓词。</p>

<p>来自 <a href="https://developer.apple.com/videos/play/wwdc2015/223/" rel="noreferrer noopener nofollow">WWDC 2015 Introducing the Contacts Framework for iOS and OS X session</a> .
他们说 <code>predicateForEnablingContact</code> 在“CNContact”上进行评估。该文档没有说谓词必须像 <code>CNContactFetchRequest</code> 那样来自 <code>CNContact+Predicates</code>。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>已经找到问题了。当我遇到这个问题时,我的头发几乎掉光了。解决方案是在 value 中添加撇号。像这样</p>

<pre><code>let predicate = NSPredicate(format: &#34;ANY self.phoneNumbers.&#39;value&#39;.&#39;digits&#39; BEGINSWITH %@&#34;, &#34;+420&#34;
</code></pre>

<p>希望对你有帮助。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何使用带有 CNContactPickerViewController 的一组电话号码过滤联系人?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/37481483/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/37481483/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何使用带有 CNContactPickerViewController 的一组电话号码过滤联系人?