Ios 为什么addTarget不会在Swift中删除?
当我从屏幕返回并再次进入屏幕时,Ios 为什么addTarget不会在Swift中删除?,ios,swift,xcode,swift5,mpremotecommandcenter,Ios,Swift,Xcode,Swift5,Mpremotecommandcenter,当我从屏幕返回并再次进入屏幕时,nextTrackCommand的目标会被多次调用,即使我在视图中删除目标也会消失。我做错了什么 override func viewDidLoad(){ super.viewDidLoad() UIApplication.shared.beginReceivingRemoteControlEvents() MPRemoteCommandCenter.shared().nextTrackCommand.addTarget{[unowned self](\ux)->
nextTrackCommand
的目标会被多次调用,即使我在视图中删除目标也会消失。我做错了什么
override func viewDidLoad(){
super.viewDidLoad()
UIApplication.shared.beginReceivingRemoteControlEvents()
MPRemoteCommandCenter.shared().nextTrackCommand.addTarget{[unowned self](\ux)->中的MPRemoteCommandHandlerStatus
打印(“转到下一曲目”)
回报,成功
}
}
覆盖函数视图将消失(u动画:Bool){
MPRemoteCommandCenter.shared().nextTrackCommand.removeTarget(自)
}
您正在调用的重载不会将self
添加为目标。它添加了一个以前不知道的NSObject
对象作为目标。它返回这个对象。因此,如果要删除它,应该获取其返回值,将其保存在属性中,以便将其传递给removeTarget
调用addTarget(处理程序:)
方法添加要调用的块。通过调用removeTarget(:)
方法,传入此方法返回的对象,来删除处理程序
或者,打电话,实际上可以让你添加自我
作为目标。发现得好,回答得好。正如马特所说,回答得好。(投票)addTarget(handler:)
似乎是一个名称不正确的方法。它表明它正在使用target/action,但它接受一个块并返回一个命令处理程序对象。没有任何目标/行动!请注意,视图将消失
并不一定意味着VC生命的终结。风投可能在消失后再次出现。当前代码将使目标在视图重新出现时保持删除状态。我不知道这是不是有意的…@清扫者是的,谢谢。我把它移到了viewdidense
viewdidense
这里没有帮助@当您不从CurrentVC
返回,而是转到某个NextVC
时,Sweeper想帮您解决这个问题。在这种情况下,CurrentVC
将触发viewWillEnglishe/viewDidEnglish
,并取消订阅。为了解决这个问题,您可以将addTarget
订阅从viewdiload
移动到viewwillbeen
@Legonaftik是的,我正在使用viewdiload和viewDidAppear@SwiftiSwift不,你不是。您使用的是viewdiddemouse
和viewDidLoad
。那些不是配对的。
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)
}