xcode 为什么剪贴板UIPasteboardChanged通知被触发两次?

ql3eal8s  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(151)

我订阅了剪贴板文本更改通知。每次在我的应用程序中复制一些东西到剪贴板中时,它会触发事件两次。换句话说,onCopy()被调用两次。(xCode 8.1; iOS 9、10)

import Foundation

protocol Clipboard {
    func onCopy()
}

class SecureClipboard : NSObject, Clipboard {
    static let sharedReader = SecureClipboard()
    private var clipboardContent: String?
    private var clipboardBeingCleared: Bool = false

    /// Lifycycle

    private override init() {
        super.init()
        subscribForClipboardChanges()
    }

    private func subscribForClipboardChanges() {
        NotificationCenter.default.addObserver(self,
                                               selector: #selector(onCopy),
                                               name:NSNotification.Name.UIPasteboardChanged,
                                               object: nil)
    }

    /// Clipboard

    func onCopy() {
        // Called twice
    }
}
b5lpy0ml

b5lpy0ml1#

它发送回通知,其中包含有关粘贴板内容如何更改的信息,例如Added或Removed事件。它确实会为每个粘贴板更改事件触发两次,但每次包含的用户信息都不同。
我去抖动了一小段时间来忽略这些,因为我不需要通知的userInfo中包含任何信息,否则,您可以尝试解析内容并准确地找出您关心的内容。

NotificationCenter.default
        .publisher(for: UIPasteboard.changedNotification)
        .debounce(for: .milliseconds(100), scheduler: DispatchQueue.main)

相关问题