繁体   English   中英

Swift UIButton和IBAction在Objective C中崩溃

[英]Swift UIButton and IBAction crashing in Objective C

我正在创建一个用Swift编写的可到达性警报,并在最初用目标C编写的应用程序中被调用。我正确设置了所有bridged-header.h。 当我单击在Swift中创建的UIButton和也在Swift中编写的IBAction时,就会发生问题。 下面是错误和代码。 有没有办法防止这种崩溃?

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[NSNotificationQueue buttonTapped:]:无法识别的选择器已发送到实例0x7ae602d0'

//  NetworkErrorView.swift


import Foundation
import UIKit



@objc class NetworkErrorView: NSObject {

    var xCoordinate:CGFloat = 0
    var yCoordinate: CGFloat = 0
    var width: CGFloat = 0
    var height: CGFloat = 0
    var reTryButton = UIButton()


func renderAlertView() -> UIView  {

    let alert = UIAlertView()
    alert.title = "Connection Failed"
    alert.message = "Your device is not connected to the Internet. Please try again later."
    alert.addButtonWithTitle("OK")
    alert.show()
    return alert

    }


func renderReTryButton() -> UIView {

    var buttonImage = UIImage(named: "Btn-Try-Again@2x.png")
    reTryButton.addTarget(self, action: Selector("buttonTapped:"), forControlEvents: UIControlEvents.TouchUpInside)
    reTryButton.setBackgroundImage(buttonImage, forState: UIControlState.Normal)
    reTryButton.frame = CGRect(x: 18, y: 470, width: 290, height: 30)
    println("stopes here")
    return reTryButton

    }


   @IBAction func buttonTapped (sender: AnyObject!) {

    let alertView = UIAlertView()
    alertView.title = "Connection Failed"
    alertView.message = "Your device is not connected to the Internet. Please try again later."
    alertView.addButtonWithTitle("OK")
    alertView.show()

    }

func render() -> UIView {

    var networkErrorView = UIView()

    let screenSize: CGRect = UIScreen.mainScreen().bounds

    let screenWidth = screenSize.width;

    let screenHeight = screenSize.height;

if screenHeight == 480 {

    xCoordinate = 0

    yCoordinate = 74

    width = 320

    height = 361

    var imgNoConnection = UIImage(named: "Noconnectionz.png")
    networkErrorView = UIImageView(image: imgNoConnection)

    }

else if screenHeight == 568 {

    xCoordinate = 0

    yCoordinate = 74

    width = 320

    height = 443

    var imgNoConnection = UIImage(named: "Noconnection@2x.png")
    networkErrorView = UIImageView(image: imgNoConnection)

    }

    return networkErrorView

}

}

这就是我在目标C中称呼它的地方

Swift *connectivity = [[Swift alloc]init];
bool swiftConnected = [connectivity reachability];

if (!swiftConnected)  {
    NetworkErrorView *networkErrorView = [[NetworkErrorView alloc]init];
    [networkErrorView renderAlertView];
     UIView *subView = [networkErrorView render];
    [super.view addSubview: subView];
    [super.view addSubview:[networkErrorView renderReTryButton]];

    } 
   }

这是您的问题:

[networkErrorView renderAlertView];
 UIView *subView = [networkErrorView render];

您的函数renderAlertView没有副作用,也就是说,它所做的只是创建一个UIView并将其还给您。 但是,即使它没有副作用,您仍可以调用它而不将其分配给某些对象。

我不太确定render器的功能(请向我们显示代码!),但是我猜它不会返回任何内容,它仅呈现networkErrorView ,但是您将其分配为UIView 所以,我在想你想要更多这样的东西:

UIView *subView = [networkErrorView renderAlertView];
[subView render];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM