无法继续提取的图像
Unable to segue fetched Image
给定此函数的第一部分,其中 DL 是来自 JSON 文档的字符串,转换为 NSURL,然后转换为 UIImage 以在下一个屏幕之前准备它。我想将此 UIImage 传输到我在 ViewController2 中准备 IBOutlet 'imageView' 的下一个屏幕。
我在 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
}
})
}
您应该使用 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 方法在发送转场之前调用了 prepareForSegue
方法。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "imagePush"{
let vc2: ViewController2 = ViewController2()
vc2.imageView?.image = sender as UIImage
}
}
我不太熟悉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")
}
}
})
}
}
给定此函数的第一部分,其中 DL 是来自 JSON 文档的字符串,转换为 NSURL,然后转换为 UIImage 以在下一个屏幕之前准备它。我想将此 UIImage 传输到我在 ViewController2 中准备 IBOutlet 'imageView' 的下一个屏幕。
我在 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
}
})
}
您应该使用 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 方法在发送转场之前调用了 prepareForSegue
方法。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "imagePush"{
let vc2: ViewController2 = ViewController2()
vc2.imageView?.image = sender as UIImage
}
}
我不太熟悉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")
}
}
})
}
}