【发布时间】:2014-08-31 22:28:35
【问题描述】:
我需要从 AddressBook 框架转换这个函数的返回值:
ABRecordCopyValue(nil, kABPersonPhoneProperty)
到 ABMultiValueRef 类型的值
此功能目前标记为:
func ABRecordCopyValue(record: ABRecordRef!, property: ABPropertyID) -> Unmanaged<AnyObject>!
所以我可以像这样将它转换为非托管:
ABRecordCopyValue(person, kABPersonPhoneProperty) as Unmanaged<ABMultiValueRef>
但是我怎样才能将它作为 ABMultiValueRef 获取,以便我可以将它传递给这个函数呢?
func ABMultiValueGetIndexForIdentifier(multiValue: ABMultiValueRef!, identifier: ABMultiValueIdentifier) -> CFIndex
我这样做了:
let managedPhones = Unmanaged.fromOpaque(phones.toOpaque()).takeUnretainedValue() as ABMultiValueRef
而且我不断收到此编译器错误:
Bitcast requires both operands to be pointer or neither
%89 = bitcast %objc_object* %88 to %PSs9AnyObject_, !dbg !325
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
【问题讨论】:
-
我有同样的错误。我坚持获取排序的书籍记录:(
-
我听说这是因为 Apple 尚未(截至 iOS 8 SDK Beta 4)在 AddressBook 框架上启用 CF_IMPLICIT_BRIDGING_ENABLED。
-
好的,现在我明白了:(
-
我现在发布了我的解决方案。你不能说 ABMultiValueRef。你应该说“as NSObject as ABMultiValueRef”。我希望这会有所帮助
标签: swift unmanaged abrecordcopyvalue