ABPeoplePickerNavigationController shouldContinueAfterSelectingPerson deprecated Swift
Asked Answered
E

1

-1

Since i update my version of xcode 6 to beta 3 i having a lot of trouble with AddressBookUI.

Reading the Apple API documentation i saw the function:

func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, shouldContinueAfterSelectingPerson person: ABRecordRef!) -> Bool {}

Was deprecated in IOS 8. How can i update this method to the correct version?

in this method i have the code:

var dadosContato: Dictionary<String, String> = ["firstName": "", "lastName": "","mobileNumber": "", "homeNumber": ""]

//NOME
var firstName: Unmanaged<AnyObject> = ABRecordCopyValue(person, kABPersonFirstNameProperty)
dadosContato["firstName"] = firstName.takeRetainedValue() as? String

//SOBRENOME
var lastName: Unmanaged<AnyObject> = ABRecordCopyValue(person, kABPersonLastNameProperty)
dadosContato["lastName"] = lastName.takeRetainedValue() as? String

//RECEBENDO OS TELEFONES
var phones: ABMultiValueRef = ABRecordCopyValue(person, kABPersonPhoneProperty).takeUnretainedValue() as ABMultiValueRef

for var index = 0; index < ABMultiValueGetCount(phones); ++index{
    let currentPhoneLabel = ABMultiValueCopyLabelAtIndex(phones, index).takeUnretainedValue() as CFStringRef as String
    let currentPhoneValue = ABMultiValueCopyValueAtIndex(phones, index).takeUnretainedValue() as CFStringRef as String

    if currentPhoneLabel == kABPersonPhoneMobileLabel {
        dadosContato["mobileNumber"] = currentPhoneValue
    }

    if currentPhoneLabel == kABHomeLabel {
        dadosContato["homeNumber"] = currentPhoneValue
    }

}

With one when i compile i get the error:

Bitcast requires both operands to be pointer or neither
  %143 = bitcast %objc_object* %142 to %PSs9AnyObject_, !dbg !511
Bitcast requires both operands to be pointer or neither
  %144 = bitcast %PSs9AnyObject_ %143 to i8*, !dbg !511
Bitcast requires both operands to be pointer or neither
  %221 = bitcast %objc_object* %220 to %PSs9AnyObject_, !dbg !517
Bitcast requires both operands to be pointer or neither
  %222 = bitcast %PSs9AnyObject_ %221 to i8*, !dbg !517
Bitcast requires both operands to be pointer or neither
  %297 = bitcast %objc_object* %296 to %PSs9AnyObject_, !dbg !522
Stored value type does not match pointer operand type!
  store %PSs9AnyObject_ %297, %objc_object** %298, align 8, !dbg !522
 %objc_object*Stored value type does not match pointer operand type!
  store %PSs9AnyObject_ %297, %objc_object** %303, align 8, !dbg !526
 %objc_object*Stored value type does not match pointer operand type!
  store %PSs9AnyObject_ %297, %objc_object** %319, align 8, !dbg !530
 %objc_object*Stored value type does not match pointer operand type!
  store %PSs9AnyObject_ %297, %objc_object** %349, align 8, !dbg !539
 %objc_object*Bitcast requires both operands to be pointer or neither
  %380 = bitcast %objc_object* %379 to %PSs9AnyObject_, !dbg !542
Bitcast requires both operands to be pointer or neither
  %381 = bitcast %PSs9AnyObject_ %380 to i8*, !dbg !542
LLVM ERROR: Broken function found, compilation aborted!
Command /Applications/Xcode6-Beta3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 1
Exciseman answered 20/7, 2014 at 21:9 Comment(3)
I'm thinking that this is a bug in the Swift compiler. I've run into the same problem. Hopefully Apple fixes it soon. A temporary workaround would be to write the Address Book code in Objective-C (and have a method that returns your data structure) that your Swift code would then call.Ryun
and the function shouldContinueAfterSelectingPerson? what is the correct way to use it now with ios 8?Exciseman
I answered this question here: #24678874Virgilio
C
1

you have the half of the answer I not had. You need to implement a check before use your code in phone:

            let phoneV: ABMultiValueRef = ABRecordCopyValue(record, kABPersonPhoneProperty).takeUnretainedValue() as ABMultiValueRef

            if ABMultiValueGetCount(phoneV) > 0
            {
                var phones: ABMultiValueRef = ABRecordCopyValue(contactPerson, kABPersonPhoneProperty).takeUnretainedValue() as ABMultiValueRef

                for var index = 0; index < ABMultiValueGetCount(phones); ++index{
                    let currentPhoneLabel = ABMultiValueCopyLabelAtIndex(phones, index).takeUnretainedValue() as CFStringRef as String
                    let currentPhoneValue = ABMultiValueCopyValueAtIndex(phones, index).takeUnretainedValue() as CFStringRef as String

                    if currentPhoneLabel == kABPersonPhoneMobileLabel {
                        println(currentPhoneValue)
                    }

                    if currentPhoneLabel == kABHomeLabel {
                        println(currentPhoneValue)
                    }

                }                    
            }
Chancellery answered 10/3, 2015 at 20:13 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.