为什么`CKDiscoverUserIdentitiesOperation`为所有输入条目调用`userIdentityDiscovered`块?

时间:2016-11-26 18:27:01

标签: ios cloudkit nsoperation

我的理解是,当执行CKDiscoverUserIdentitiesOperation时,仅在实际找到用户身份时才调用userIdentityDiscovered块。 (我认为这是指与iCloud帐户关联的电话号码或电子邮件地址。)

相反,当我执行此操作时,它会为列表中的每个条目调用userIdentityDiscovered块。

此外,当该帐户确实无效时,该块中的user参数会返回未初始化

我做错了什么?

代码

    var emailInfos: [CKUserIdentityLookupInfo] = []
    for email in contact.emailAddresses {
        emailInfos.append(CKUserIdentityLookupInfo(emailAddress: email.value as String))
    }
    var phoneInfos: [CKUserIdentityLookupInfo] = []
    for phone in contact.phoneNumbers {
        let phoneNumber = phone.value.stringValue
        phoneInfos.append(CKUserIdentityLookupInfo(phoneNumber: phoneNumber))
    }
    let lookupInfos = emailInfos + phoneInfos
    let op = CKDiscoverUserIdentitiesOperation(userIdentityLookupInfos: lookupInfos)
    op.discoverUserIdentitiesCompletionBlock = { error in
        print("*** Complete")
    }
    op.userIdentityDiscoveredBlock = { (user, userLookupInfo) in
        print("*** found user: \(userLookupInfo)")
    }
    CKContainer.default().add(op)

样本输出

*** found user: <CKUserIdentityLookupInfo: 0x618000270b40; email=notarealemail@notarealdomain.sldfkjsdaflskfjsdlkjf.com>
*** found user: <CKUserIdentityLookupInfo: 0x608000274600; phone=(555) 555-5555>
*** Complete

用户参数为uninitialized

*** found user: <CKUserIdentityLookupInfo: 0x600000266d40; email=notarealemail@notarealdomain.sldfkjsdaflskfjsdlkjf.com>
(lldb) po user
 <uninitialized>
(lldb) 

参考

0 个答案:

没有答案