[英]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函數,而不會出現問題(即,我可以在控制台中看到日志“按鈕起作用”)。 誰能看到導致應用程序崩潰的原因以及如何解決該問題?
您的Objective-C和Swift消息簽名不匹配。 您有兩種選擇:
在您的Objective-C代碼中,進行更改
- (void)pressedNextButton:(NSString *)message
至
- (void)pressedNextButtonWithMessage:(NSString *)message
在您的Swift代碼中,更改
func pressedNextButton(message: String)
至
func pressedNextButton(_ message: String)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.