ios - Swift Delegate 在展开 Optional 值时意外返回 nil
问题描述
在协议中设置我的委托继续抛出零。我尝试了其他帖子中建议的多种方法。我试图让我的协议 + 委托启动并运行,但是无法解决为什么它继续抛出零。
强制展开,从文件中的不同位置调用委托,删除和添加弱变量。
列表显示:
protocol MixPlayer : class {
func playMix(message: String)
}
class IssueViewController: UIViewController {
@IBOutlet weak var issueCollection: UICollectionView!
@IBOutlet weak var issueImage: UIImageView!
var viewController: ViewController?
var collectionViewtitle: String?
var mixImageName: String?
var mixList: [[String: String]]!
weak var mixDelegate: MixPlayer?
override func viewDidLoad() {
super.viewDidLoad()
issueCollection.dataSource = self
issueCollection.delegate = self
}
}
....
extension IssueViewController: UICollectionViewDelegate, UICollectionViewDataSource {
....
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let url = mixList[indexPath.row]["url"] {
mixDelegate?.playMix(message: url)
}
}
}
视图控制器:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var mainContainer: UIView!
@IBOutlet weak var playerEmbedView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let secondVC = IssueViewController()
secondVC.mixDelegate = self
}
}
extension ViewController: MixPlayer {
func playMix(message: String) {
print(message)
}
}
任何打电话的尝试
mixDelegate?.playMix(message: url)
不成功。目前我只是想记录基本的打印语句。
解决方案
可能你的secondVC
内部ViewController
被释放了。在你的ViewController
.
class ViewController: UIViewController {
@IBOutlet weak var mainContainer: UIView!
@IBOutlet weak var playerEmbedView: UIView!
lazy var secondVC: IssueViewController = {
let secondVC = IssueViewController()
secondVC.mixDelegate = self
return secondVC
}()
override func viewDidLoad() {
super.viewDidLoad()
}
...
}
要知道您的类是否被释放,请添加一个带有 print 语句的 deinit。
deinit {
print("Deallocated")
}
推荐阅读
- amazon-web-services - 将文件从 s3 存储桶复制到另一个 AWS 账户
- javascript - Cordova/Phonegap 在传入 webrtc 电话时唤醒应用程序
- php - 使用验证模型将逗号分隔值插入数据库
- javascript - 关于如何覆盖 Chart JS Donut 库的任何建议
- c - 是 stdio.ha 库吗?
- javascript - 防止 Reactjs 中的按钮自动提交
- python - 如何使用瓶中的按钮?
- javascript - 更改事件颜色。对象事件具有人员 ID,人员对象具有事件颜色
- vba - 优化 Excel VBA 代码并定义附加条件
- android - 在 Android 4.4 (API 19) kitkat 上播放视频时出现黑屏