我根据此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
}
}
关于如何实现切换到本地图像的任何提示或线索将不胜感激。 如果您需要我的任何其他信息,请随时提出要求。
答案 0 :(得分:0)
我认为您忘记通过registerNib
或registerClass
函数将单元格绑定到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; }
}
标记)或者你会遇到这个编译器投诉很多而不知道这是什么问题