xcode - 如何强制将新的 CNContact 放入本地 CNContainer?

标签 xcode swift ios9 cncontact cncontactstore

我正在编写一个应用程序,使用 CNContactStore 将通过 REST 和 JSON 获取的联系信息存储到一个容器中。我想将这些联系人与任何其他帐户分开,并且只存储在设备本地,但本地存储不存在,而且我找不到任何创建/激活联系人的方法?

我能够获取默认商店的 ID(如设备上配置的,例如 iCloud),使用:

let store = CNContactStore()
let containerID = store.defaultContainerIdentifier()

...我可以(理论上)识别这样的本地容器——如果确实存在的话:

var allContainers = [CNContainer]()
    do {
        allContainers = try store.containersMatchingPredicate(nil)
        for container in allContainers {
            if container.type == CNContainerType.Local {
                print("Local container is: \(container.identifier)")
                break
            }
        }           
    } catch {
        print("Error fetching containers")
    }

但是本地容器不存在。关于如何在本地或在新的单独容器中存储我的联系人有什么想法吗?

最佳答案

这在现在已弃用的 AB API 中是可能的,可能仍然可以作为一种解决方法:

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions( nil, nil );

ABRecordRef source = ABAddressBookGetSourceWithRecordID( addressBook, kABSourceTypeLocal );

ABRecordRef contact = ABPersonCreateInSource( source );

关于xcode - 如何强制将新的 CNContact 放入本地 CNContainer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34587214/

相关文章:

objective-c - armv7s 可执行文件大小增加

iphone - 2 Xib 的 1 个 IBOutlet 对象具有相同的文件所有者?

iOS 11 PDFKit - curl 过渡

ios - 在动画移动对象(UIView)上未检测到点击手势

swift - 声明仅在文件范围内有效(扩展名)

objective-c - 如何在 Objective C 中释放另一个对象拥有的对象

ios - 我如何调用其他类的函数? swift ,Xcode

ios - 协议(protocol)中的无限循环确认枚举变量

ios - 将旧的 firebase 代码转换为最新版本的问题

google-chrome - Google 的 OpenInChrome 未在 iOS 9 中检测或打开 Google Chrome 应用程序