Swift Compile Error Bitcast requer que ambos os operandos sejam ponteiros ou nenhum deles

StackOverflow https://stackoverflow.com//questions/25089448

  •  02-01-2020
  •  | 
  •  

Pergunta

No Xcode6 beta 1 algo semelhante a isso funcionou, porém com o Xcode6 beta 4 houve erros.Depois de corrigir os erros, o código sem erros que tenho está abaixo

Para plano de fundo:A classe que estou usando aqui implementa ABPeoplePickerNavigationControllerDelegate que permite ao usuário selecionar um contato do catálogo de endereços.Quero receber o primeiro e-mail adicionado a essa pessoa.

func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!,didSelectPerson person: ABRecordRef!) {

    var emails = ABRecordCopyValue(person, kABPersonEmailProperty)
    var emailsObj = emails.takeUnretainedValue() as AnyObject
    var index = 0 as CFIndex
    var emailAddress = ABMultiValueCopyValueAtIndex(emailsObj, index)

    println(emailAddress)
}

No entanto, quando compilo, recebo Build Failed:

O bitcast exige que ambos os operando sejam ponteiros ou nem %80 = bitcast %objc_object* %79 a %pss9anyObject_ ,!Store %PSS9anyObject_ %80, %objc_object ** %81, alinhe 4 ,!Store %pss9anyObject_ %80, %objc_object ** %85, alinhe 4 ,! DBG! 864 %objc_object*llvm Erro:Função quebrada encontrada, compilação abortada!Comando /Applications/Xcode6-Beta4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift falhou com o código de saída 1

As linhas suspeitas são:

var emailsObj = emails.takeUnretainedValue() as AnyObject
var emailAddress = ABMultiValueCopyValueAtIndex(emailsObj, index)

Quando eu mudo o código para

func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!,didSelectPerson person: ABRecordRef!) {

    var emails = ABRecordCopyValue(person, kABPersonEmailProperty)
    var emailsObj:AnyObject? = emails.takeRetainedValue() as AnyObject
    var index = 0 as CFIndex
    var emailAddress = ABMultiValueCopyValueAtIndex(emailsObj, index)

    println(emailAddress)
}

O erro encurta para

O bitcast exige que ambos os operando sejam ponteiros ou nenhum %79 = bitcast %objc_object* %78 a %pSS9anyObject_ ,!Store %PSS9anyObject_ %79, %objc_object ** %80, alinhe 8 ,! DBG! 856 %objc_object*llvm Erro:Função quebrada encontrada, compilação abortada!Comando /Applications/Xcode6-Beta4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift falhou com o código de saída 1

Agradecemos antecipadamente por qualquer ajuda

Aarão

Foi útil?

Solução

func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!,didSelectPerson person: ABRecordRef!) {

    var unmanagedEmails = ABRecordCopyValue(person, kABPersonEmailProperty)
    let emailObj: ABMultiValueRef = Unmanaged.fromOpaque(unmanagedEmails.toOpaque()).takeUnretainedValue() as NSObject as ABMultiValueRef

    var index = 0 as CFIndex

    var unmanagedEmail = ABMultiValueCopyValueAtIndex(emailObj, index)
    var emailAddress:String = Unmanaged.fromOpaque(unmanagedEmail.toOpaque()).takeUnretainedValue() as NSObject as String

    println(emailAddress)

}

Uma resposta mais completa pode ser encontrada aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top