标签: cncontact

获取ios Swift中的所有联系人?

我知道ios swift有一个Contacts Framework,我可以在其中获取联系人,但我找不到任何方法来获取所有联系人,我可以访问该数组中的每个联系人.获取联系人的所有方法似乎都需要某种条件.有什么方法可以将所有联系人聚集在一起吗?

谢谢

ios swift cncontact

34
推荐指数
5
解决办法
3万
查看次数

创建与 PPT 通信所需的 CFMessagePort 时出错

我尝试CNContactPickerViewController使用该UIViewControllerRepresentable协议在 SwiftUI 应用程序内部呈现。正如我已经阅读的那样,似乎有一个已知问题无法正常工作,但我使用此处描述的解决方法使其正常工作。

但是,每当CNContactPickerViewController出现或取消响应时,我的输出日志中都会出现以下错误:

[PPT] 创建与 PPT 通信所需的 CFMessagePort 时出错。

我试图找到对此的解释,但似乎互联网上的任何地方都没有答案。有人知道这个错误来自哪里,PPT是什么?此错误CNContactPickerViewController是否与 SwiftUI 无法正常工作有关?

我第一次在 iOS 14 beta 和 Xcode 12 beta 中注意到这个错误,它仍然存在于 iOS 14.2 和 Xcode 12.2。我不知道错误是否也出现在 iOS 13 上。
我已经发布了关于此的反馈报告。

ios swift cncontact swiftui

31
推荐指数
1
解决办法
3546
查看次数

CNContactViewController forUnknownContact无法使用,破坏了界面

[似乎在iOS 10中修复!]因此以下内容仅适用于iOS 9 ...


我一直在试验Apple新的Contacts框架,我发现CNContactViewController的三种形式之一存在一个巨大的错误.它破坏了周围的界面,使你的应用变得无用; 用户卡住了.

为了使这个bug易于查看,我在https://github.com/mattneub/CNContactViewControllerBug上发布了一个示例项目.

要进行实验,请运行该项目并执行以下步骤:

  1. 点击按钮(未知人员).

  2. 如果请求,授予访问权

  3. 您将在我们的导航界面中显示部分联系人(请注意顶部的"返回"按钮).

  4. 点按添加到现有联系人.出现联系人选择器.

  5. 点按取消.实际上你从这里做什么并不重要,但点击取消是最简单的,也是达到错误的最快方法.

  6. 我们现在回到部分联系,但导航界面已经消失.用户无法从此界面中退出.该应用程序被软管.

只是为了澄清,以下是您需要采取的步骤的屏幕截图:

在此输入图像描述

点按添加到现有联系人即可查看:

在此输入图像描述

点按取消即可看到此内容; 观察它与第一个屏幕截图相同,但导航栏消失了:

在此输入图像描述

我已经尝试了很多方法来解决这个bug,但似乎没办法.据我所知,此窗口由"进程外"框架呈现,不属于您的应用程序.你无法摆脱它.

那么问题是什么?我猜是这样的:任何人都可以告诉我一种方法来使这个视图控制器(在这种形式下)可用吗?有没有找到的解决方法?

编辑此错误出现在iOS 9.0中,仍然存在于iOS 9.1中.在评论中,@ ServgeSkopus报告说切换到已弃用的通讯簿框架没有帮助; bug在某处的底层结构中.

ios9 cncontact

29
推荐指数
3
解决办法
6619
查看次数

CNContactStoreDidChangeNotification被多次触发

我可以观察CNContactStoreDidChangeNotification应用程序处于后台状态时更改联系人数据库的时间.我很确定只添加了一个观察者NSNotificationCenter.NSNotificationCenter即使我只添加一个新联系人,问题是发布多次(2,3,5甚至更多次).问题出在哪儿?

nsnotificationcenter ios swift cncontact cncontactstore

28
推荐指数
1
解决办法
2257
查看次数

Contact Framework等效于ABAddressBook.ABAddressBookRegisterExternalChangeCallback

我正在将已弃用的通讯簿框架中的应用程序迁移到新的"联系人框架".该应用程序使用ABAddressBookRegisterExternalChangeCallback时,另一个应用程序更改联系人通知.

我无法在Contacts Framework中找到相同的功能.苹果文件说,将使用与默认通知中心CNContactStoreDidChangeNotification通知:

在另一个更改发生时发布通知CNContactStore.

根据Apple的建议,我的代码如下:

NSNotificationCenter.defaultCenter().addObserver(
    self,
    selector: "contactsChanged:",
    name: CNContactStoreDidChangeNotification,
    object: nil)
Run Code Online (Sandbox Code Playgroud)

但是,我发现这种方法存在两个问题:

  1. 我收到所有更改通知,包括我自己的应用程序所做的更改.
  2. 通知是虚假的 - 我收到许多通知,只需一次更改.

如果我在我的应用程序中进行更改时记录通知的调试描述,我会得到如下内容:

NSConcreteNotification 0x7d3370e0 {name = CNContactStoreDidChangeNotification; userInfo = {
    CNNotificationOriginationExternally = 1;
    CNNotificationSourcesKey =     (
    );
}}
Run Code Online (Sandbox Code Playgroud)

如果更改是在外部进行的:

NSConcreteNotification 0x7bf7a690 {name = CNContactStoreDidChangeNotification; userInfo = {
    CNNotificationOriginationExternally = 1;
    CNNotificationSourcesKey =     (
    );
}}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,没有什么明显可以区分它们.

任何人都可以告诉我如何从联系人框架中获得相同的行为,因为人们可以得到ABAddressBookRegisterExternalChangeCallback

abaddressbook ios swift cncontact cncontactstore

22
推荐指数
1
解决办法
1127
查看次数

CNContact标识符中的":ABPerson"字符串是什么?

我的iOS应用程序会不时检查联系人并将新内容导入到自己的数据库中.

我通过identifier字段检查该联系人是否已存在,通常由UUID填充:

CNContactStore *store = [CNContactStore new];
[store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError *error) {
if (granted) {
    NSArray *keys = @[CNContactNamePrefixKey,
        CNContactGivenNameKey,
        CNContactMiddleNameKey,
        CNContactFamilyNameKey,
        CNContactInstantMessageAddressesKey];
        NSString *containerId = store.defaultContainerIdentifier;
        NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:containerId];
        NSArray *cnContacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:keys error:&err];            
        for (CNContact *contact in cnContacts) {
            ...
            NSString *contactId = [contact identifier];
            [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"uuid == %@", contactId]];

    ...

}
Run Code Online (Sandbox Code Playgroud)

有时标识符除了UUID包含:ABPerson字符串(例如9326A125-3C0A-494F-9E50-BBFCF1140EF0:ABPerson),并且此类联系仅出现一次.下次出现相同的联系,但与另一个UUID和没有:ABPerson.

因此,我的联系人导入器认为他们是2个不同的联系人并保存2次.

:ABPersonCNContact标识符中的字符串是什么?
我知道带有类的AddressBook框架ABPerson,但是我使用Contacts框架来处理设备联系人,为什么会:ABPerson …

objective-c ios cncontact

18
推荐指数
1
解决办法
1182
查看次数

iOS Swift CNContactPickerViewController搜索联系人并添加到选择中

我使用的是iOS 9和Swift 2.2

我已经CNContactPickerViewController使用内置iOS CNContactPickerDelegate来获取联系号码,

CNContactPickerViewController屏幕中,当我点击顶部的搜索字段并搜索名称时,我需要将该名称添加到我的选择中,但在点击联系人后没有任何反应.

我到处搜索,并找到任何解决方案

我是否需要在代码中添加任何内容,或者是iOS 9错误

@IBAction func AddBtnKlkFnc(sender: AnyObject)
{
    let contactPicker = CNContactPickerViewController()
    contactPicker.delegate = self
    contactPicker.displayedPropertyKeys =
        [CNContactPhoneNumbersKey]
    self.presentViewController(contactPicker, animated: true, completion: nil)
}

func contactPicker(picker: CNContactPickerViewController, didSelectContacts ContctAryVar: [CNContact])
{
    for ContctVar in ContctAryVar
    {
        let ContctDtlVar = ContctDtlCls()
        ContctDtlVar.ManNamVar = CNContactFormatter.stringFromContact(ContctVar, style: .FullName)!

        for ContctNumVar: CNLabeledValue in ContctVar.phoneNumbers
        {
            var MobNumVar  = ((ContctNumVar.value as! CNPhoneNumber).valueForKey("digits") as? String)!
            if(MobNumVar.Len() > 10)
            {
                MobNumVar = MobNumVar.GetLstSubSrgFnc(10)
            }
            ContctDtlVar.MobNumVar = …
Run Code Online (Sandbox Code Playgroud)

search ios contactpicker swift2 cncontact

16
推荐指数
2
解决办法
4176
查看次数

CNContactFormatter需要哪些密钥?

我正在尝试使用新格式化联系人的姓名CNContactFormatter.看起来,我没有获取联系人所需的所有名称属性.

Terminating app due to uncaught exception 'CNPropertyNotFetchedException', reason: 'A property was not requested when contact was fetched.'
Run Code Online (Sandbox Code Playgroud)

有谁知道哪些是必需的?我尝试在其他几个人中抓住以下内容而没有运气:

        CNContactNamePrefixKey,
        CNContactGivenNameKey,
        CNContactFamilyNameKey,
        CNContactMiddleNameKey, 
        CNContactPreviousFamilyNameKey,
        CNContactNameSuffixKey,
        CNContactNicknameKey,
        CNContactPhoneticGivenNameKey,
        CNContactPhoneticMiddleNameKey,
        CNContactPhoneticFamilyNameKey,
        CNContactOrganizationNameKey,
        CNContactDepartmentNameKey,
        CNContactJobTitleKey,
Run Code Online (Sandbox Code Playgroud)

无论是CNContactFomatter类参考,也没有取出方法的文档提供任何线索.

谢谢!

formatting ios9 cncontact cncontactstore cncontactformatter

15
推荐指数
1
解决办法
5278
查看次数

如何在Swift 3中向CNMutableContact添加新邮件?

很快..我有这个代码添加新的联系人,它一直工作,直到我的代码转换为Swift 3,现在它接受所有属性,除了电子邮件我得到两个错误:

1-Argument类型'String?' 不符合预期类型'NSCopying'

2-Argument类型'String?' 不符合预期类型'NSSecureCoding'

当我尝试向联系人添加电子邮件时,这是我的代码:

    let workEmail = CNLabeledValue(label:"Work Email", value:emp.getEmail())
    contact.emailAddresses = [workEmail]
Run Code Online (Sandbox Code Playgroud)

任何帮助?

ios swift cncontact

13
推荐指数
2
解决办法
5752
查看次数

如何通过CNMutableContact在ios移动联系人中添加自定义隐藏字段?

我想在我的应用程序的iOS移动联系人中添加一个自定义隐藏字段.

是否可以在iOS移动联系人中添加具有价值的新隐藏字段?CNMutableContact是否允许我添加新的自定义属性?

contacts ios swift cncontact

13
推荐指数
1
解决办法
876
查看次数