gpt4 book ai didi

ios - 为什么 addTarget 在 Swift 中没有被删除?

转载 作者:行者123 更新时间:2023-12-05 08:37:37 27 4
gpt4 key购买 nike

当我从屏幕导航回来并再次进入屏幕时,nextTrackCommand 的目标被多次调用,即使我在 viewWillDisappear 中删除了目标。我做错了什么?

override func viewDidLoad() {
super.viewDidLoad()

UIApplication.shared.beginReceivingRemoteControlEvents()

MPRemoteCommandCenter.shared().nextTrackCommand.addTarget { [unowned self] (_) -> MPRemoteCommandHandlerStatus in
print("go to next track")
return .success
}
}

override func viewWillDisappear(_ animated: Bool) {
MPRemoteCommandCenter.shared().nextTrackCommand.removeTarget(self)
}

最佳答案

addTarget 的过载您正在调用的不会将 self 添加为目标。它添加了一个您之前不知道的 NSObject 对象作为目标。 它返回这个对象。所以如果你想删除它,你应该得到它的返回值,把它保存在一个属性中,这样你就可以把它传递给removeTarget

Call the addTarget(handler:) method to add a block to be called. Remove the handler by calling the removeTarget(_:) method, passing in the object returned by this method.

var target: NSObject?
override func viewDidLoad() {
super.viewDidLoad()

UIApplication.shared.beginReceivingRemoteControlEvents()

target = MPRemoteCommandCenter.shared().nextTrackCommand.addTarget { [unowned self] (_) -> MPRemoteCommandHandlerStatus in
print("go to next track")
return .success
}
}

override func viewWillDisappear(_ animated: Bool) {
MPRemoteCommandCenter.shared().nextTrackCommand.removeTarget(target)
}

或者,调用 other overload这实际上允许您将 self 添加为目标。

关于ios - 为什么 addTarget 在 Swift 中没有被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65055851/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com