Ios 反犹主义行动根本不起作用

Ios 反犹主义行动根本不起作用,ios,swift,uibarbuttonitem,Ios,Swift,Uibarbuttonitem,我有一个助手类 class PDFPreviewHelper { var pdfNavigationController: UINavigationController! func previewButtonPressed(rootViewController: UIViewController) { let pdfViewController = PDFViewController(resource: "final.pdf") pdfNaviga

我有一个助手类

class PDFPreviewHelper {
    var pdfNavigationController: UINavigationController!
    func previewButtonPressed(rootViewController: UIViewController) {
        let pdfViewController = PDFViewController(resource: "final.pdf")
        pdfNavigationController = UINavigationController(rootViewController: pdfViewController)

        let backButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "backButtonPressedInPDF")
        pdfViewController.navigationItem.setLeftBarButtonItem(backButton, animated: false)

        rootViewController.presentViewController(pdfNavigationController, animated: true, completion: nil)
    }



    func backButtonPressedInPDF() {
        pdfNavigationController.dismissViewControllerAnimated(true, completion: nil)
    }
}
我在我的rootviewcontroller中调用上述帮助器类中的函数,如下所示:

func previewInPdfButtonPressed() {
    let a = PDFPreviewHelper()
    a.viewI129InPDF(self)
}

我成功地将
pdfNavigationController
显示在我的
rootViewController
上,但每当我按下
back
按钮时,都不会调用任何内容。为什么会这样?我在
backButtonPressedInPDF
函数中设置了一个断点,它甚至没有达到断点。

我认为问题就在这里

let backButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "backButtonPressedInPDF")
致:

我认为问题在于
操作:“backButtonPressedInPDF”
中缺少

此外,还要通过添加
(发件人:AnyObject)
来更改方法吗

func backButtonPressedInPDF(sender:AnyObject) {
        pdfNavigationController.dismissViewControllerAnimated(true, completion: nil)
    }

您需要通过下面的方式将
leftBarButtonItem
分配给
UINavigationController

pdfViewController.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "backButtonPressedInPDF")

问题是您正在创建
PDFPreviewHelper
类的临时实例,并使用它来显示视图控制器。没有保留参考资料。 这可以通过两种方式解决:

方法1:
previewInPdfButtonPressed
方法添加到
PDFViewController
类中。然后更改实现,如下所示

let backButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: pdfViewController, action: "backButtonPressedInPDF")
方法2: 您应该保留对象
a
,直到您关闭
PDFViewController navigationcontroller
。 即使你这样做了,你也会得到这样的例外

2016-03-16 15:43:03.140 XXXX[3757:585277] *** NSForwarding: warning: object 0x7ff5eb72be70 of class 'XXXX.PDFPreviewHelper' does not implement methodSignatureForSelector: -- trouble ahead
Unrecognized selector -[XXXX.PDFPreviewHelper backButtonPressedInPDF]
这是因为您没有为您的
PDFPreviewHelper
子类化
NSObject
。 你可以用两种方法修复它

  • PDFPreviewHelper
    作为
    NSObject
    子类
  • 添加
    动态
    
    函数的关键字,如
    dynamic func previewInPdfButtonPressed(){..}
  • 问题是当程序超出此功能范围时,
    a
    被释放。您针对
    a
    的操作当然不能再执行了


    解决方案
    a
    添加为
    视图控制器的属性

    您确定要调用
    a.viewI129InPDF(self)
    @Johnykutty,是的,它确实以模式显示PDFViewController。但是在您的
    PDFPreviewWhelper
    中,您编写的
    previewButtonPressed
    与我的方法相同。@Kahsn请检查您以不同的方式完成的操作!为什么行动是引用的?
    2016-03-16 15:43:03.140 XXXX[3757:585277] *** NSForwarding: warning: object 0x7ff5eb72be70 of class 'XXXX.PDFPreviewHelper' does not implement methodSignatureForSelector: -- trouble ahead
    Unrecognized selector -[XXXX.PDFPreviewHelper backButtonPressedInPDF]
    
    func previewInPdfButtonPressed() 
    {
        let a = PDFPreviewHelper()
        a.viewI129InPDF(self)
    }