标签: abrecordcopyvalue

Swift(iOS 8 SDK)将非托管<ABMultiValueRef>转换为ABMultiValueRef

我需要从AddressBook框架转换此函数的返回值:

ABRecordCopyValue(nil, kABPersonPhoneProperty)
Run Code Online (Sandbox Code Playgroud)

到ABMultiValueRef类型的值

此功能目前标记为:

func ABRecordCopyValue(record: ABRecordRef!, property: ABPropertyID) -> Unmanaged<AnyObject>!
Run Code Online (Sandbox Code Playgroud)

所以我可以将它转换为Unmanaged,如下所示:

ABRecordCopyValue(person, kABPersonPhoneProperty) as Unmanaged<ABMultiValueRef>
Run Code Online (Sandbox Code Playgroud)

但是,我怎样才能将它作为ABMultiValueRef,以便我可以将它传递给这个函数?

func ABMultiValueGetIndexForIdentifier(multiValue: ABMultiValueRef!, identifier: ABMultiValueIdentifier) -> CFIndex
Run Code Online (Sandbox Code Playgroud)

我这样做了:

let managedPhones = Unmanaged.fromOpaque(phones.toOpaque()).takeUnretainedValue() as ABMultiValueRef
Run Code Online (Sandbox Code Playgroud)

我一直收到这个编译错误:

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
Run Code Online (Sandbox Code Playgroud)

unmanaged abrecordcopyvalue swift

14
推荐指数
1
解决办法
4408
查看次数

Swift - 检查nil的非托管地址簿单值属性

我对iOS-Development和swift相对较新.但到目前为止,我总是能够通过对stackoverflow和一些文档和教程的一些研究来帮助自己.但是,有一个问题我找不到任何解决方案.

我想从用户地址簿中获取一些数据(例如单值属性kABPersonFirstNameProperty).因为.takeRetainedValue()如果此联系人在地址簿中没有firstName值,该函数会抛出错误,我需要确保该ABRecordCopyValue()函数确实返回一个值.我试图在一个闭包中检查这个:

let contactFirstName: String = {
   if (ABRecordCopyValue(self.contactReference, kABPersonFirstNameProperty) != nil) {
      return ABRecordCopyValue(self.contactReference, kABPersonFirstNameProperty).takeRetainedValue() as String
   } else {
      return ""
   }
}()
Run Code Online (Sandbox Code Playgroud)

contactReference 是一个类型的变量 ABRecordRef!

当地址簿联系人提供firstName值时,一切正常.但是如果没有firstName,则应用程序会崩溃.takeRetainedValue().似乎if语句没有帮助,因为ABRecordCopyValue()虽然没有firstName,但函数的非托管返回值不是nil.

我希望我能够清楚地解决问题.如果有人能帮我解决一些脑波,那将是很棒的.

unmanaged abaddressbook ios abrecordcopyvalue swift

12
推荐指数
2
解决办法
5566
查看次数

标签 统计

abrecordcopyvalue ×2

swift ×2

unmanaged ×2

abaddressbook ×1

ios ×1