Ios Swift:LEGATE可选值错误
我想将一些任务委托给AcceptController,但“SendController”中的委托属性始终返回nil,因此不会执行任何委托。我就是不明白为什么我的委托属性“übergabeDelegate”总是返回零Ios Swift:LEGATE可选值错误,ios,swift,Ios,Swift,我想将一些任务委托给AcceptController,但“SendController”中的委托属性始终返回nil,因此不会执行任何委托。我就是不明白为什么我的委托属性“übergabeDelegate”总是返回零 protocol ÜbergabeDelegate { func übergebeText(text: String) } class SendController: UIViewController { @IBOutlet weak var textField:
protocol ÜbergabeDelegate {
func übergebeText(text: String)
}
class SendController: UIViewController {
@IBOutlet weak var textField: UITextField!
var übergabeDelegate: ÜbergabeDelegate?
@IBAction func save(_ sender: UIButton) {
if let text = textField.text {
if übergabeDelegate != nil {
übergabeDelegate!.übergebeText(text: text)
} else {
print("\nübergabeDelegate is nil\n")
}
}
}
}
class AcceptController: UIViewController {
@IBOutlet weak var label: UILabel!
let sendController = SendController()
override func viewDidLoad() {
super.viewDidLoad()
sendController.übergabeDelegate = self
//print("Delegate gesetzt")
}
}
extension AcceptController: ÜbergabeDelegate {
func übergebeText(text: String) {
label.text = "\(text)"
}
}
我希望标签显示我在SendController上提供的输入,但标签的文本实际上从未更改。在
viewDidLoad
中,让SendController=SendController()
创建一个局部变量。sendController
将在viewDidLoad
返回后释放。将sendController
设置为AcceptController
的一个属性,当您分配它时,代理将保持不变,因为sendController
对象在viewDidLoad
返回后不会被释放。是,这是正确的。您有SendController
的生存期问题,该问题将通过新属性SendController
解决。另外,将SendController.übergabeDelegate
声明为weak
属性也是合适的,因为您将创建一个保留周期。但是myübergabeDelegate属性仍然返回nil,所以问题仍然不存在fixed@Lukiolio,请发布您的更新代码,以便我们查看更改内容,请显示您是如何显示您的SendController
@Lukiolio的,因此SendController
由AcceptController
呈现?我想我弄错了!My let sendController创建sendController的新实例,该实例在我的故事板中不是对我的实际sendController的引用SendController()
创建一个新实例,该实例不是故事板中的实例。您需要使用segue或通过实例化/呈现控制器来实际引用SendController
。您是对的!我认为这就是问题所在!