无法删除提取的图像

时间:2015-02-21 22:21:30

标签: ios swift uiimageview uistoryboardsegue

鉴于此函数的第一部分DL是来自JSON doc的String,转换为NSURL,然后转换为UIImage以在下一个屏幕之前准备它。我想将这个UIImage转移到下一个屏幕,在那里我准备了IBOutlet' imageView'用于ViewController2。

我在ViewController1中的ViewDidLoad()中调用此函数。

但是我无法弄清楚如何将图像推到下一个屏幕。

我在附加到自定义按钮的故事板中准备了一个Push segue,并为附加到ViewController1的它创建了一个IBAction。 我已经尝试过prepareForSegue和其他涉及实例化故事板等的尝试,即使数据似乎正在被正确获取并且segue正常工作,也没有图像出现。

我做错了什么?谢谢你的帮助!

func fetchAndPrepImages() {

    let url = NSURL(string:"https://something.json")
    let JSONData = NSData(contentsOfURL: url!)
    let json = JSON(data: JSONData!)
    var err: NSError?
    let count: Int? = json["entry"].arrayValue?.count

    if let ct = count {
        for index in 0...ct {
            if var thumbURL = json["entry"][index]["smimg"]["label"].stringValue {
                self.thumbURLS.append(thumbURL)
            }
        }
    }
    // prepare image for segue
    let nextImage = thumbURLS.formatItem()
    let vc2: ViewController2 = self.storyboard?.instantiateViewControllerWithIdentifier("VC2") as ViewController2
    let imageURL: NSURL? = NSURL(string: nextImage)
    let request: NSURLRequest = NSURLRequest(URL: imageURL!)

    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in

        if error == nil {
            println(data) // ** This prints (presumably) image data in the console ** 
            vc2.imageView?.image = UIImage(data: data) // no error, but no image coming up 

        }
    })
}

2 个答案:

答案 0 :(得分:1)

您应该使用prepareForSegue方法,并在sendAsynchronousRequest方法中调用您的segue。所以首先你应该用一个标识符制作一个segue,比如" imagePush"。然后将图片设置为sender

if error == nil {
    println(data) // ** This prints (presumably) image data in the console ** 
    self.performSegueWithIdentifier("imagePush", sender: UIImage(data: data)

}

prepareForSegue方法中,您只需要将发件人转换为UIImage。这应该工作,因为performSegue方法在发送segue之前调用prepareForSegue方法。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "imagePush"{
        let vc2: ViewController2 = ViewController2()
        vc2.imageView?.image = sender as UIImage
    }
}

答案 1 :(得分:0)

我不熟悉Xcode的内置函数,而prepareForSegue是我之前使用但忘记了的函数。用户Christian Woerz在我如何构建我的功能的背景下提出了一些解决方案,但是我无法准确地实现它们,因此我废弃了这种方法并重新进行了重新设计。我将fetchAndPrep()函数的底部(准备)一半移动到prepareForSegue()函数中,这很有效。示例代码如下:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "imagePush" {
        let nextImage = thumbURLS.formatItem()
        let vc2: ViewController2 = segue.destinationViewController as ViewController2

        let imageURL: NSURL? = NSURL(string: nextImage)
        let request: NSURLRequest = NSURLRequest(URL: imageURL!)

        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
            if error == nil {
                println(data)
                if let image = UIImage(data: data) {
                    vc2.imageView?.image = image
                } else {
                    println("there's an error")
                }

            }

        })
    } 
}