iOS Swift EXC_BAD_ACCESS代码2 SearchTextField(UITextField子类)

时间:2017-07-27 02:37:16

标签: ios objective-c iphone exc-bad-access nszombie

我对使用Swift的iOS开发相对较新(我实际上有3年的Java开发经验,尝试学习新技术)。我正在创建一个需要使用名为SearchTextField的库的应用程序:

https://github.com/apasccon/SearchTextField

在一个shellnut中,它是一个UITextField子类,具有下拉建议/自动完成功能。

以下是使用它的ViewController ......

@IBOutlet var homeAddressTextField: SearchTextField!
@IBOutlet var workAddressTextField: SearchTextField!

override func viewDidLoad() {
    super.viewDidLoad()

    homeAddressTextField.delegate = self
    workAddressTextField.delegate = self

    homeAddressTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
    workAddressTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)

    //vvvvvvvvv EXC_BAD_ACCESS CODE 2 THROWN BELOW vvvvvvvv
    homeAddressTextField.filterStrings(["foo","bar"])
}
应该实例化

homeAddressTextField,否则对它的任何引用都应抛出相同的异常。当断点到有问题的行时,homeAddressTextField是 NOT nil ,并正确显示它是SearchTextField的一个实例。

我已经尝试了许多方法来修复或至少找到错误的来源。正如你所知,我为Outlet使用了强var而不是弱var。

我尝试使用 zombies 来跟踪任何访问已解除分配的内存块的尝试,但zombie Instruments却没有访问僵尸。

如果值得注意,只要删除包含filterStrings()的有问题的行,错误就会消失。任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:2)

图库中似乎有bug,请你点击这里

SearchTextField Issue

它们的存储库中仍存在未解决的问题。

如果您尝试使用某个现成代码,请在存储库中查看问题。

答案 1 :(得分:0)

您确定已将IBOutlet附加到界面构建器中吗?

尝试在崩溃的行上放置一个断点。这将在执行该行之前立即停止。然后,在控制台(命令+ shift + y)中,您将看到一行显示“lldb” - 将光标放在那里并键入po homeAddressTextField并查看它是否返回值,或者为零。如果为nil,那么IBOutlet设置不正确,这将导致访问不良。

此外,如果 确实为零,那么您需要确保在SearchTextField的接口构建器中设置子类和模块,并确保设置插座本身。您还可以尝试在viewDidAppear()方法中过滤这些字符串,以查看它是否确实是对SearchTextField的引用的问题。

编辑:我已经查看了一些回购代码。您可能不希望设置数据源和委托属性,因为SearchTextField具有自己的数据源和委托。您只需要在最后一行设置可过滤字符串。因此,请尝试删除调用以使视图控制器成为数据源/委托。

答案 2 :(得分:0)

单击textField,然后添加类名称= SearchTextField.swift对我有用。

enter image description here