3

我正在编写一个应用程序,它使用 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")
    }

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

4

2 回答 2

0

使用现已弃用的 AB API 可以如下实现,但仍可作为一种解决方法:

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions( nil, nil );

ABRecordRef source = ABAddressBookGetSourceWithRecordID( addressBook, kABSourceTypeLocal );

ABRecordRef contact = ABPersonCreateInSource( source );
于 2017-12-05T20:56:42.757 回答
-1

containersMatchingPredicate(nil)仅返回默认容器。

我有一个类似的问题。如果icloud已配置,它将仅返回CNContainerTypeCardDAV类型容器,否则返回本地容器。

于 2016-03-15T06:16:08.070 回答