SourceView 和 SourceRect 是否贬值?

SourceView and SourceRect is depreciated?

我正在尝试修复我的项目的所有警告,但我似乎不知道该怎么做。

我收到的警告是:

'sourceView' 在 iOS 13.0 中被弃用:重命名为 'UIContextMenuInteraction'

我已经阅读了文档 here 但我仍然不知道如何修复此警告?

这是它正在谈论的代码:

extension CollectionsViewController: UIViewControllerPreviewingDelegate {
    
    func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
        
        let tableView = previewingContext.sourceView as! UITableView
        if let indexPath = tableView.indexPathForRow(at: location) {
            
            let cell  = tableView.cellForRow(at: indexPath) as! CollectionCell
            let touch = cell.convert(location, from: tableView)
            
            if let productResult = cell.productFor(touch) {
                previewingContext.sourceRect = tableView.convert(productResult.sourceRect, from: cell)
                return self.productDetailsViewControllerWith(productResult.model)
                
            } else if let collectionResult = cell.collectionFor(touch) {
                previewingContext.sourceRect = tableView.convert(collectionResult.sourceRect, from: cell)
                return self.productsViewControllerWith(collectionResult.model)
            }
        }
        return nil
    }
    
    func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
        self.navigationController!.show(viewControllerToCommit, sender: self)
    }
}


如有任何帮助,我们将不胜感激!

UIViewControllerPreviewingDelegate 协议更改为 documented:

Deprecated UseUIContextMenuInteractionDelegate instead.

因此您需要删除 previewingContext 委托方法而不是更改其参数 sourceview 等。您需要从新协议中选择而不是此方法 UIContextMenuInteractionDelegate 的 按照 Apple 的指示委托方法。

换句话说,你的扩展已经完全过时了,你需要根据新协议重写。