【问题标题】:Error with fetching value from CFArray从 CFArray 获取值时出错
【发布时间】:2016-03-15 22:06:49
【问题描述】:

我正在尝试从通讯录中获取联系人。我的代码在 Objective C 中正常工作,但是当我将其转换为 swift 时出现错误

无法将“Swift.UnsafePointer”类型的值转换为“Swift.AnyObject”

下面是我的代码

    var errorRef: Unmanaged<CFError>? = nil
    let addressBook: ABAddressBookRef = ABAddressBookCreateWithOptions(nil, &errorRef).takeRetainedValue()
    let allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray //as [ABRecordRef]
    let numberOfPeople = ABAddressBookGetPersonCount(addressBook)

    for (var i=0; i < numberOfPeople; i++){
        runOnMainQueueWithoutDeadlocking({ () -> () in
            ProgressHUD.show("Reading Contact \(i) out of \(numberOfPeople)")
        })

        let aPerson = CFArrayGetValueAtIndex(allPeople, i) as! ABRecordRef     //Error here
    }

如何将记录转换为 ABRecordRef。请帮忙

【问题讨论】:

    标签: swift unsafe-pointers abrecord cfarraybsearchvalues


    【解决方案1】:

    您不能强制将 UnsafePointer&lt;Void&gt; 强制转换为类型。您必须先将该 void 指针转换为 UnsafePointer&lt;Type&gt;,然后获取其内存:

    let aPerson = UnsafePointer<ABRecordRef>(CFArrayGetValueAtIndex(allPeople, i)).memory
    

    仅供参考...ABAddressBook 在 iOS 9 上已被弃用。对于针对该操作系统的新代码,请改用 CNContactStore

    【讨论】:

      猜你喜欢
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 2019-11-10
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多