Ios ipad上tableViewCell popover的Sharesheet

Ios ipad上tableViewCell popover的Sharesheet,ios,swift,uitableview,uiactivityviewcontroller,Ios,Swift,Uitableview,Uiactivityviewcontroller,我正试图从cusom单元格中的一个按钮将某些内容共享到共享页,该按钮位于一个显示为popover的UITableView上。我不断得到: 由于未捕获的异常“NSInvalidArgumentException”,正在终止应用程序,原因是:“应用程序试图在其自身上呈现模式视图控制器。呈现控制器是 我意识到这是因为这是在UITableViewCell上调用的,但我不知道如何以正确的方式执行?有什么帮助吗?您需要将vc.present更改为TableViewController.present。当然,

我正试图从cusom单元格中的一个按钮将某些内容共享到共享页,该按钮位于一个显示为popover的UITableView上。我不断得到:

由于未捕获的异常“NSInvalidArgumentException”,正在终止应用程序,原因是:“应用程序试图在其自身上呈现模式视图控制器。呈现控制器是


我意识到这是因为这是在UITableViewCell上调用的,但我不知道如何以正确的方式执行?有什么帮助吗?

您需要将
vc.present
更改为
TableViewController.present
。当然,您没有从单元格中获取对该视图控制器的引用。如何从单元格中获取对该视图控制器的引用?可能是在加载UItableViewCell时,您可以将tableVIewController的弱引用设置为UItableViewCell。因此,您可以避免保留循环,同时还可以显示视图控制器。此代码应在视图控制器中执行,而不是在单元格中执行。使用委派或闭包将单元格调用代码保存在视图控制器CAN中
func passToShareSheet(fileName: String, ext: String, stringToWriteToFile: String){
    let fileName = "\(fileName).\(ext)"
    let path = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(fileName)
    do {
        try stringToWriteToFile.write(to: path!, atomically: true, encoding: String.Encoding.utf8)
        let vc = UIActivityViewController(activityItems: [path as Any], applicationActivities: [])
        vc.popoverPresentationController?.sourceView = self
        vc.present(vc, animated: true, completion: nil)
        print(stringToWriteToFile)
    } catch {
        print("Failed to create file")
        print("\(error)")
    }
}