将本地图像添加到imageView中

时间:2016-04-20 03:11:29

标签: ios swift video uiimageview

我根据此YouTube视频指南进行了编程,并使用了所述视频中提供的代码(目前正在this one工作)。目前的课程重点是添加可在线获取的缩略图。但是,我目前的目标是使用本地图像作为缩略图,因为我所拥有的几个视频在我的特定项目中永远不会改变。

目前我有以下代码。它完全正常(因为它应该),标记为" LINE A"

的行
//
//  ViewController.swift
//  Project

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet var tableView: UITableView!
    var videos:[Video] = [Video]()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let model = VideoModel()
        self.videos = model.getVideos()
        self.tableView.dataSource = self
        self.tableView.delegate = self

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return videos.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("BasicCell")!

        //let videoTitle = videos[indexPath.row].videoTitle

        //Customize the cell to display the video title
        //cell.textLabel?.text = videoTitle

        //Construct the video thumbnail url

        //LINE A
        let videoThumbnailUrlString = "https://i.imgur.com/bYESnOo.jpg"

        //LINE B
        //let videoThumbnailUrlString = "/Users/User/Documents/Project/" + videos[indexPath.row].thumbnailId + ".JPG"

        //Create a NSURL object
        let videoThumbnailUrl = NSURL(string: videoThumbnailUrlString)

        if videoThumbnailUrl != nil {

            //Create a NSURLRequest object
            let request = NSURLRequest(URL: videoThumbnailUrl!)

            //Create a NSURLSession
            let session = NSURLSession.sharedSession()

            //Create a datatask and pass in the request
            let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in

                    dispatch_async(dispatch_get_main_queue(), { () -> Void in

                        //Get a reference to the imageview element of the cell
                        let imageView = cell.viewWithTag(1) as! UIImageView

                        //Create an image object from the data and assign it into the imageView
                        imageView.image = UIImage(data: data!)

                    })

            })

            dataTask.resume()

        }
        return cell
    }

}

我尝试使用标记为" LINE B"的行,但它返回标记为Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)的错误 读数低于fatal error: unexpectedly found nil while unwrappin an Optional value (lldb)

这是Video类:

    import UIKit

class Video: NSObject {

    var videoId:String = ""
    var thumbnailId:String = ""
    var videoTitle:String = ""
    var videoDescription:String = ""
}

VideoModel类如下:

//
//  VideoModel.swift

import UIKit

class VideoModel: NSObject {

    func getVideos() -> [Video] {

        var videos = [Video]()

        //Create video object
        let video1 = Video()
        //Assign properties
        video1.videoId = "_T-zq-aKha3"
        video1.thumbnailId = "1Alissa"
        video1.videoTitle = "Alissa"
        video1.videoDescription = "Tu vieja samurai comiendo un peanut butter jelly sandwich."

        //Append it into the videos array

        videos.append(video1)


        //Create video object
        let video2 = Video()
        //Assign properties
        video2.videoId = "LUabbwPd-4I"
        video2.thumbnailId = "2SettingGoals"
        video2.videoTitle = "Setting Goals"
        video2.videoDescription = "Rakatata y las mujeres donde estan auuuuu azucar."

        //Append it into the videos array

        videos.append(video2)


        //Create video object
        let video3 = Video()
        //Assign properties
        video3.videoId = "j1HTxdtE5Yg"
        video3.thumbnailId = "3Plan"
        video3.videoTitle = "Plan"
        video3.videoDescription = "Sancho panza se come un hotdog enrollado en 5 rodajas de pan con harta ketchup."

        //Append it into the videos array

        videos.append(video3)


        //Create video object
        let video4 = Video()
        //Assign properties
        video4.videoId = "7moB28WpcIg"
        video4.thumbnailId = "4AlissaSuges"
        video4.videoTitle = "Alissa's Suggestions"
        video4.videoDescription = "Sancho panza se come un hotdog enrollado en 5 rodajas de pan con harta ketchup."

        //Append it into the videos array

        videos.append(video4)

        return videos
    }

}

关于如何实现切换到本地图像的任何提示或线索将不胜感激。 如果您需要我的任何其他信息,请随时提出要求。

2 个答案:

答案 0 :(得分:0)

我认为您忘记通过registerNibregisterClass函数将单元格绑定到tableview。 还有一件事,你使用的函数dequeueReusableCellWithIdentifier(identifier: String) -> UITableViewCell?可能会返回nil对象。其返回值为optional。因此,如果它为零,最好使用if let语句,如果发生这种情况,则创建一个单元格。

答案 1 :(得分:0)

试试这个:

!

你应该真的避免使用强制可选包装( var text = ["Question Everything!", "Envision the future!", "Change your perspective!"]; var counter = 0; var elem = document.getElementById("slogantxt"); setInterval(change, 3500); function change() { elem.innerHTML = text[counter]; counter++; if(counter >= text.length) { counter = 0; } } 标记)或者你会遇到这个编译器投诉很多而不知道这是什么问题