簡體   English   中英

Swift 3-將數據傳遞回以前的ViewController

[英]Swift 3 - passing data back to previous viewcontroller

我知道以前曾問過這個問題,但是我似乎無法弄清楚為什么我會收到以下錯誤消息,因為單擊按鈕並將字符串從ViewControllerB傳遞到ViewController A時,應用崩潰了:

2017-03-02 12:42:02.485320 APPNAME [1111:2345678]-[ViewControllerAPressedNextButtonWithMessage:]:無法識別的選擇器已發送到實例0x11fd7eb90 2017-03-02 12:42:02.589949 APPNAME [1111:2345678]無效模式'kCFRunLoopCommonModes'提供給CFRunLoopRunSpecific-在_CFRunLoopError_RunCalledWithInvalidMode上中斷以進行調試。 每次執行該消息只會出現一次。 2017-03-02 12:42:07.586960 APPNAME [1111:2345678] *由於未捕獲的異常'NSInvalidArgumentException'而終止應用程序,原因:'-[ViewControllerAPressedNextButtonWithMessage:]:無法識別的選擇器發送到實例0x11fd7eb90'*首先拋出調用棧: (0x1819201c0 0x18035855c 0x181927278 0x181924078 0x18181e59c 0x100287824 0x1002878a0 0x18779e7b0 0x1879125ec 0x18779e7b0 0x18779e730 0x187788be4 0x187788d4c 0x18779e01c 0x18779db44 0x187798d8c 0x187769858 0x100159aec 0x187f56cb8 0x187f50720 0x1818ce278 0x1818cdbc0 0x1818cb7c0 0x1817fa048 0x18327d198 0x1877d4628 0x1877cf360 0x100077ef0 0x1807dc5b8)的libc ++ abi.dylib:與類型NSException的未捕獲的異常終止

我的應用是Swift 3和舊版Objective-C的結合體:

ViewControllerA.m

@interface ViewControllerA () <ViewControllerBDelegate>
@property (nonatomic, strong) NavViewController * navVC;

@end

@implementation ViewControllerA
- (void)viewDidLoad{
    ...
    self.navVC = [NavViewController instantiate]; // instantiate is a function that inits the storyboard and instantiates the viewcontroller from the NavViewController class
    ViewControllerB *vcB = [self.navVC.viewControllers firstObject]; // ViewControllerB is actually the rootviewcontroller of navVC
    vcB.delegate = self; 
    ...
}

- (void)pressedNextButton:(NSString *)message
{
    NSLog(@"Button worked: %@", message);
}
@end

ViewControllerB.swift

@objc protocol ViewControllerBDelegate {
    func pressedNextButton(message: String)
}

@objc class ViewControllerB: UIViewController, NSFetchedResultsControllerDelegate, UITableViewDataSource, UITableViewDelegate {

    var delegate: ViewControllerBDelegate?
    var passedMessage: String = "Pass this message back to ViewControllerA"

    @IBAction func nextButton(_ sender: UIBarButtonItem) { // this is the button that causes the app to crash
        self.delegate?.pressedNextButton(message: passedMessage) // app crashes after executing this line
    }
}

錯誤發生在

self.delegate?.pressedNextButton(消息:passedMessage)

被執行。 另外,如果我從代碼中刪除了'passedMessage'變量和相關參數,則控制台將確認執行了PressedNextButton函數,而不會出現問題(即,我可以在控制台中看到日志“按鈕起作用”)。 誰能看到導致應用程序崩潰的原因以及如何解決該問題?

這是我的nextButton IBOutlet連接檢查器的屏幕截圖: 在此處輸入圖片說明

您的Objective-C和Swift消息簽名不匹配。 您有兩種選擇:

修復Objective-C代碼

在您的Objective-C代碼中,進行更改

- (void)pressedNextButton:(NSString *)message

- (void)pressedNextButtonWithMessage:(NSString *)message

或者,修復Swift代碼

在您的Swift代碼中,更改

func pressedNextButton(message: String)

func pressedNextButton(_ message: String)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM