点击ImageView后的SIGABRT

时间:2015-09-07 14:44:39

标签: ios iphone swift sigabrt

我试图在屏幕上点击一个图像视图时更改生成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;

    })

}
}

2 个答案:

答案 0 :(得分:2)

我认为,因为你没有打开数据,因为数据可能是零。

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()

答案 1 :(得分:1)

我跑了你的项目。

错字:“imageTapped”和“imageTaped”不是一回事。关键线索在控制台错误消息中: - [TestBeaconsSwift.ViewController imageTapped:]:无法识别的选择器发送到实例0x7b76bc30