【问题标题】:swift header file cannot find protocol declaration for 'CNContactPickerDelegate'swift头文件找不到'CNContactPickerDelegate'的协议声明
【发布时间】:2018-04-25 15:45:09
【问题描述】:

我正在尝试添加与此问题相关的足够代码和信息。

我想使用本地联系人列表来获取电话号码。所以,我更喜欢使用 iOS9 及更高版本支持的“联系人”框架。

当我将这些委托方法添加到我的代码时。我从 Swift 头文件(ProjectName-Swift.h 文件)中收到错误消息。我在谷歌上搜索,但没有找到任何解决方案。我很确定,“联系人”框架导致了“导入循环”问题。有人有什么建议吗?

// Calling CNContactPickerViewController method

func clickedAdressBook() {
    let contactPicker = CNContactPickerViewController()
    contactPicker.delegate = self
    self.present(contactPicker, animated: true, completion: nil)
}

// to handle ContactsDelegate delegate metods

extension MoneyTransferToGsmVC : ContactsDelegate {
}

为了解决这个问题,我创建了从 CNContactPickerDelegate 扩展而来的新协议。但是没用

    import UIKit
import Foundation
import Contacts
import ContactsUI

protocol ContactsDelegate : CNContactPickerDelegate {

}

当我添加上述扩展时,我遇到了错误。

【问题讨论】:

  • 信息不足。请不要只显示代码中的一些点点滴滴。找出所有重现问题所需的代码并显示它。 (例如,创建一个普通的新项目并添加足够的代码来自己重现问题,然后描述或发布该项目。)
  • 嗨@matt,我无法粘贴所有代码/项目。我尝试用代码截断、屏幕截图和表达式来解释我的问题。我认为,您无法重现此问题,因为它的相关项目文件是“导入循环”。如果您想了解具体信息,可以询问。
  • 我确实问过了。您使用了很多没有解释的类型名称。解释他们。
  • 我添加了从 CNContactPickerDelegate 扩展而来的 ContactsDelegate 协议。
  • 您希望 MoneyTransferToGsmVC 了解 ContactsDelegate 的问题吗?但它不能,因为你没有标记它@objc。您的扩展名也是如此。没有标记 @objc 的内容对 Objective-C 是隐藏的。

标签: ios swift ios-contacts


【解决方案1】:

我找到了解决办法。

我知道,这个答案不是一个好的选择。但这对我有用。

首先创建一个新的 .h 文件来复制“Swift Header File”。就我而言,我创建了“ProjectName-SwiftFixed.h”。

然后,我在我的代码中使用 #import "ProjectName-SwiftFixed.h" 而不是 #import "ProjectName-SwiftFixed.h"。

【讨论】:

    猜你喜欢
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多