我想在与UITextFieldDelegate分开的类中实现UIViewController,但是当我这样做时,在运行时会收到EXC_BAD_ACCESS异常。

那么,为什么要这样做:

class MyViewController : UIViewController, UITextFieldDelegate
{
  ...

  func createUI()
  {
    let someTextField: UITextField = UITextField()
    someTextField.delegate = self

    ...
  }

  func textFieldShouldReturn(textField: UITextField!) -> Bool
  {
    textField.resignFirstResponder()
    return true;
  }
}

但这不是:
class MyViewController : UIViewController
{
  ...

  func createUI()
  {
    let someTextField: UITextField = UITextField()
    someTextField.delegate = MyTextFieldDelegate()

    ...
  }
}

class MyTextFieldDelegate : NSObject, UITextFieldDelegate
{
  func textFieldShouldReturn(textField: UITextField!) -> Bool
  {
    textField.resignFirstResponder()
    return true;
  }
}

最佳答案

注意delegate的声明:

unowned(unsafe) var delegate: UITextFieldDelegate?

创建MyTextFieldDelegate()并将其分配给delegate,然后在createUI()返回时将其释放。它是由ARC释放的,因为没有它拥有。您遇到的问题正是unsafe警告您的问题。

您需要创建对MyTextFieldDelegate实例的强引用。您还需要确保在释放文本字段之后才释放委托(delegate)。

关于ios - 在单独的类中实现UITextFieldDelegate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28032973/

10-10 07:15