找不到 'ABPeoplePickerNavigationControllerDelegate' 的协议声明
Cannot find protocol declaration for 'ABPeoplePickerNavigationControllerDelegate'
在一个已经有 ObjC 的项目中,我添加了一个 Swift Class
import AddressBookUI
class MyVC : UITableViewController, ABPeoplePickerNavigationControllerDelegate {
}
MyApp-Swift.h:289:42:找不到 'ABPeoplePickerNavigationControllerDelegate' 的协议声明;你是说 'UINavigationControllerDelegate' 吗?
不,Swift,我的意思是ABPeoplePickerNavigationControllerDelegate
。真的想知道我在这里做错了什么......
我需要添加
#import <AddressBookUI/AddressBookUI.h>
在我的 Briding-Header.h
中。人们可能会认为我的 Swift 文件中的 import
就足够了。不是。
也就是说,现在我在实施时遇到了一个新问题
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier) {
}
出现下一个错误:
-Swift.h:297:110: 预期类型
中的 ABRecord
类型有问题
didSelectPerson:(ABRecord)
如果我还在 Briding Header 或 Swift 文件中导入 AddressBook
也无济于事。
你可以看看我用过的代码here
纯 Swift 项目,不涉及 Objective-C
对我来说,编译很好不使用任何 Bridging-Header
import UIKit
import AddressBook
import AddressBookUI
class ViewController: UITableViewController, ABPeoplePickerNavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier) {
}
}
我正在将相关框架(AddressBook、AddressBookUI)添加到 link 二进制文件 我的目标
阶段
Objective-C 项目,带有桥接头
我的桥接-Header.h:
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
- 确保在目标中正确引用了桥接头
- swift VC代码同上
修复了我的 第二个 问题,感谢 @neonacho on Twitter。而不是 ABRecord
我不得不使用 ABRecordRef
来编译。不确定为什么 Diego 的代码有效而不是我的。于是就变成了
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!,
didSelectPerson person: ABRecordRef!, property: ABPropertyID, identifier: ABMultiValueIdentifier) {
}
而且有效。
FWIW,这在纯 Swift 中与 ABRecord
一起使用但在 Objective-C 兼容性 header 中不起作用的原因是存在 typealias
后者显然没有正确翻译回去:
typealias ABRecordRef = ABRecord
可能值得提交雷达
在一个已经有 ObjC 的项目中,我添加了一个 Swift Class
import AddressBookUI
class MyVC : UITableViewController, ABPeoplePickerNavigationControllerDelegate {
}
MyApp-Swift.h:289:42:找不到 'ABPeoplePickerNavigationControllerDelegate' 的协议声明;你是说 'UINavigationControllerDelegate' 吗?
不,Swift,我的意思是ABPeoplePickerNavigationControllerDelegate
。真的想知道我在这里做错了什么......
我需要添加
#import <AddressBookUI/AddressBookUI.h>
在我的 Briding-Header.h
中。人们可能会认为我的 Swift 文件中的 import
就足够了。不是。
也就是说,现在我在实施时遇到了一个新问题
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier) {
}
出现下一个错误:
-Swift.h:297:110: 预期类型
中的ABRecord
类型有问题
didSelectPerson:(ABRecord)
如果我还在 Briding Header 或 Swift 文件中导入 AddressBook
也无济于事。
你可以看看我用过的代码here
纯 Swift 项目,不涉及 Objective-C
对我来说,编译很好不使用任何 Bridging-Header
import UIKit
import AddressBook
import AddressBookUI
class ViewController: UITableViewController, ABPeoplePickerNavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier) {
}
}
我正在将相关框架(AddressBook、AddressBookUI)添加到 link 二进制文件 我的目标
阶段Objective-C 项目,带有桥接头
我的桥接-Header.h:
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
- 确保在目标中正确引用了桥接头
- swift VC代码同上
修复了我的 第二个 问题,感谢 @neonacho on Twitter。而不是 ABRecord
我不得不使用 ABRecordRef
来编译。不确定为什么 Diego 的代码有效而不是我的。于是就变成了
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!,
didSelectPerson person: ABRecordRef!, property: ABPropertyID, identifier: ABMultiValueIdentifier) {
}
而且有效。
FWIW,这在纯 Swift 中与 ABRecord
一起使用但在 Objective-C 兼容性 header 中不起作用的原因是存在 typealias
后者显然没有正确翻译回去:
typealias ABRecordRef = ABRecord
可能值得提交雷达