在xcode6 beta中,类似于这的东西,但是用xcode6 beta 4有误差。修复错误后,无错误代码我的位置低于

背景: 我在这里使用的课程实现了生成的,它允许用户从地址簿中选择联系人。我想收到添加到该人的第一封电子邮件。

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)
}
. 但是,当我编译时,我获得构建失败:

bitcast需要两个操作数是指针还是既不是 %80= bitcast%objc_object *%79到%pss9anyobject_,!dbg!860 存储的值类型与指针操作数类型不匹配! 存储%pss9anyobject_%80,%objc_object **%81,对齐4,!dbg!860 %objc_object *存储的值类型与指针操作数类型不匹配! Store%PSS9AnyObject_%80,%objc_object **%85,对齐4,!dbg!864 %objc_object * llvm错误:找到损坏功能,编译中止! 命令/应用程序/ xcode6-beta4.app/contents/developer/toolchains/xcodedefault.xctoolchain/usr/bin/swift失败,退出代码1

嫌疑线是:

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

当我将代码更改为

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)
}
.

错误缩短到

bitcast需要两个操作数是指针还是既不是 %79= bitcast%objc_object *%78到%pss9anyobject_,!dbg!856 存储的值类型与指针操作数类型不匹配! Store%PSS9AneObject_%79,%objc_object **%80,align 8,!dbg!856 %objc_object * llvm错误:找到损坏功能,编译中止! 命令/应用程序/ xcode6-beta4.app/contents/developer/toolchains/xcodedefault.xctoolchain/usr/bin/swift失败,退出代码1

提前感谢任何帮助

亚伦

有帮助吗?

解决方案

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)

}
.

更完整的答案可以找到这里

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top