点击 ImageView 后的 SIGABRT

SIGABRT after tapped an ImageView

当我点击屏幕图像视图时,我试图更改生成 func viewDidLoad 的图像,但在点击屏幕后,我在行中收到一个 SIGABRT

class AppDelegate: UIResponder, UIApplicationDelegate { 

这是代码

AppDelegate.swift

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        /*application.registerUserNotificationSettings(
        UIUserNotificationSettings(
                forTypes: [.Alert, .Badge, .Sound], categories: nil))*/

        return true
    }

    func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {
    application.applicationIconBadgeNumber = 0
        let alert = UIAlertView()
        alert.title = "Alert"
        alert.message = notification.alertBody
        alert.addButtonWithTitle("Dismiss")

        alert.show()
    }

}

ViewController.swift

    class ViewController: UIViewController {

    @IBOutlet var imageview: UIImageView!


    @IBAction func localNotification(sender: UIButton) {
        let localNotification = UILocalNotification()
        localNotification.fireDate = NSDate(timeIntervalSinceNow: 5)
        localNotification.alertBody = "Esta es una notificacion"
        localNotification.timeZone = NSTimeZone.defaultTimeZone()
        localNotification.applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1
        UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
    }


    override func viewDidLoad() {
        super.viewDidLoad()

        let imageUrlString = "http://www.personal.psu.edu/cmr5496/sky_main.jpg";
        let url = NSURL(string:imageUrlString);
        let data = NSData(contentsOfURL: url!)
        imageview.image = UIImage(data: data!);


        let singleTap = UITapGestureRecognizer(target:self, action:Selector("imageTapped:"))
        singleTap.numberOfTapsRequired = 1;
        singleTap.numberOfTouchesRequired = 1;
        imageview.addGestureRecognizer(singleTap);
        imageview.userInteractionEnabled = true;
            }

    func transformar(str: String) -> UIImage {

        let url = NSURL(string:str);
        let data = NSData(contentsOfURL: url!)
        let image = UIImage (data:data!);
        return image!;
    }

    func imageTaped(gestureRecognizers: UIGestureRecognizer) {

        UIView.animateWithDuration(0.5, animations: {


    self.imageview.image = self.transformar("http://www.brandontreb.com/wp-content/uploads/2009/06/screenshot_021.png");
    //imageview.alpha = 0.0f;
    //imageview.contentMode = UIViewContentModeTop;

    })

}
}

我想,这是因为您还没有解包数据,因为数据可能为零。

let url = NSURL(string:str)
let data = NSData(contentsOfURL: url!)
imageview.image = UIImage(data: data!)

替换为

if let url = NSURL(string:str) {
    if let data = NSData(contentsOfURL: url) {
         return UIImage (data:data)
    }else{
        print("image data invalid")
    }
}else{
    print("URL invalid")
}
return UIImage()

我运行你的项目。

错别字:"imageTapped" 和 "imageTaped" 不是一回事。关键线索在控制台错误消息中:-[TestBeaconsSwift.ViewController imageTapped:]: unrecognized selector sent to instance 0x7b76bc30