ios - 将本 map 片添加到imageView中

标签 ios swift video uiimageview

我一直在根据这个 YouTube 视频指南进行编程,并使用所述视频中提供的代码(目前在 this one 工作)。当前类(class)的重点是添加可在线使用的缩略图。但是,我当前的目标是使用本地镜像作为缩略图,因为我拥有的少数视频在我的特定项目中永远不会改变。

目前我有以下代码。它工作得很好(正如它应该的那样),标记为“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 :在解包可选值(lldb)时意外发现nil

这是视频类:

    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
    }

}

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

最佳答案

我认为您忘记通过 registerNibregisterClass 函数将单元格绑定(bind)到表格 View 。 还有一件事,您使用的函数 dequeueReusableCellWithIdentifier(identifier: String) -> UITableViewCell? 可能会返回 nil 对象。它的返回值是可选。因此,您最好使用 if let 语句以防它为 nil,并在发生这种情况时创建一个单元格。

关于ios - 将本 map 片添加到imageView中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36733129/

相关文章:

ios - 如何检测 UIview 失去焦点或在 swift 4 中获得焦点?

android - 隐藏 Activity 时播放视频

c++ - 将 IMFSample* 转换为 ID3D11ShaderResourceView*

audio - 当拓扑有两个分支时,MESessionStarted 事件中的 E_UNEXPECTED

ios - 为什么我在 Xcode 中的一个文件消失了?

ios - 从许多不同的 ViewController 中呈现 ViewController 的最佳方式

ios - 禁用TableView单元格

ios - 为什么需要@objc 标签才能使用选择器?

ios - iTunes Connect 黄色警告图标

ios - 使用 Objective-C/Swift 单例模型,为什么我们要创建一个共享实例而不只是使用类方法?