Swift (iOS 8 SDK) Convert Unmanaged to ABMultiValueRef

前端 未结 3 919
执念已碎
执念已碎 2020-12-24 15:14

I need to convert the return value of this function from the AddressBook framework:

ABRecordCopyValue(nil, kABPersonPhoneProperty)

to a val

相关标签:
3条回答
  • 2020-12-24 15:37

    In case someone is looking for a final way to deal with ABRecords in Swift 2, here it is:

    func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord) {
    
        let firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty).takeRetainedValue()
        let lastName = ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue()
    
        var emails:[String] = []
        let emailRecords = ABRecordCopyValue(person, kABPersonEmailProperty).takeRetainedValue() as ABMultiValueRef
        let emailsCount = ABMultiValueGetCount(emailRecords)
        for index in 0 ..< emailsCount {
            if let email = ABMultiValueCopyValueAtIndex(emailRecords, index).takeRetainedValue() as? String {
                emails.append(email)
            }
        }
    
        print("Contact selected. firstName: \(firstName), lastName: \(lastName), emails: \(emails)")
    
    }
    
    0 讨论(0)
  • 2020-12-24 15:42

    I found the solution:

    func peoplePickerNavigationController(
      peoplePicker: ABPeoplePickerNavigationController!,
      didSelectPerson person: ABRecordRef!) {
    
        /* Do we know which picker this is? */
        if peoplePicker != personPicker{
          return
        }
    
        /* Get all the phone numbers this user has */
        let unmanagedPhones = ABRecordCopyValue(person, kABPersonPhoneProperty)
        let phones: ABMultiValueRef =
        Unmanaged.fromOpaque(unmanagedPhones.toOpaque()).takeUnretainedValue()
          as NSObject as ABMultiValueRef
    
        let countOfPhones = ABMultiValueGetCount(phones)
    
        for index in 0..<countOfPhones{
          let unmanagedPhone = ABMultiValueCopyValueAtIndex(phones, index)
          let phone: String = Unmanaged.fromOpaque(
            unmanagedPhone.toOpaque()).takeUnretainedValue() as NSObject as String
    
          println(phone)
        }  
    }
    
    0 讨论(0)
  • 2020-12-24 15:46

    Same with me, this probably is a compiler problem. if you want to follow my thread too ABPeoplePickerNavigationController shouldContinueAfterSelectingPerson deprecated Swift

    0 讨论(0)
提交回复
热议问题