【发布时间】:2017-07-28 08:15:47
【问题描述】:
我有这个错误:
在展开可选值时意外发现 nil"
在这一行:vc.mainPreviewURL = posts[indexPath!].previewURL
请问我该如何解决这个问题? 这是我所有的代码,在此先感谢 ;)
class TableViewController: UITableViewController {
var posts = [post]()
var names = [String]()
var searchURL = "https://api.spotify.com/v1/search?q=Shawn+Mendes&type=track"
var oAuthToken = "BQCvqHzNOHyHgUTKvw43PdXV4yZs9jHvdIPsn3XbXNE5Jbg0zwNrpfwh81VMeuK5LQeRel0djaJT1IyLa1T9YzQmDypC5LkMD5z_NDzeAWRcEvH4fMc_nn50X2R_i8a38AMrjfMS8qPNhGYoHjAe8sFvjBSwQOereRr2RrEbmXc8JMGq7-Aq-ttalp87DuCRVy8mt8wVt8Muenihus8hXrctT071x7he2j_eGHJSWp7WoA5fOyk9xhzkxU_p_3Hkab6x6rbYCM4SFX9WlDtb5h_jikfehT-15Mjol_PmnRYo9WPnaCLKTs3AOblDlNk"
typealias JSONStandard = [String: AnyObject]
override func viewDidLoad() {
super.viewDidLoad()
callAlamo(url: searchURL,token: oAuthToken)
}
func callAlamo(url : String,token: String){
Alamofire.request(searchURL, method: .get, parameters: ["q":"Shawn Mendes", "type":"track"], encoding: URLEncoding.default, headers: ["Authorization": "Bearer "+oAuthToken]).responseJSON { response in
self.parseData(JSONData: response.data!)
print(response)
}
}
func parseData(JSONData:Data){
do {
var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONStandard
print(readableJSON)
if let tracks = readableJSON["tracks"] as? JSONStandard{
if let items = tracks["items"] as? [JSONStandard] {
for i in 0..<items.count{
let item = items[i]
print(item)
let name = item["name"] as! String
let previewURL = item["preview_url"] as? String
if let album = item["album"] as? JSONStandard {
if let images = album["images"] as? [JSONStandard]{
let imageData = images [0]
let mainImageURL = URL(string: imageData["url"] as! String)
let mainImageData = NSData(contentsOf: mainImageURL!)
let mainImage = UIImage(data: mainImageData as! Data)
posts.append(post.init(mainImage: mainImage! ,name: name,previewURL: previewURL))
self.tableView.reloadData()
}
}
}
}
}
}
catch {
print(error)
}
}
override func prepare(for segue: UIStoryboardSegue,sender: Any?){
let indexPath = self.tableView.indexPathForSelectedRow?.row
let vc = segue.destination as! AudioVC
vc.image = posts[indexPath!].mainImage
vc.mainSongTitle = posts[indexPath!].name
vc.mainPreviewURL = posts[indexPath!].previewURL
}
}
【问题讨论】:
-
不要强制解包该值,除非您 100% 确定它会有一个值。
indexPath为零,这就是您收到错误的原因。你的segue是从哪里调用的? indexPath 在哪里定义?此外,在使用表视图时,如果要访问行的索引,请使用indexPath.row而不仅仅是indexPath。 -
覆盖 func tableView(_ tableView:UITableView,numberOfRowsInSection section: Int) -> Int { return posts.count } @DávidPásztor override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") 让 mainImageView = cell?.viewWithTag(2) as! UIImageView mainImageView.image = posts[indexPath.row].mainImage 让 mainLabel = cell?.viewWithTag(1) 为! UILabel mainLabel.text = posts[indexPath.row].name 返回单元格! }
-
请在您的问题中以代码格式包含该问题,在评论中这样不可读。
标签: ios swift alamofire spotify