gpt4 book ai didi

ios - 加载注释时解包可选值时出现意外 fatal error

转载 作者:行者123 更新时间:2023-11-30 13:38:36 25 4
gpt4 key购买 nike

大家好,我已经被这个问题困扰了近两周了

问题是我在加载评论时解开可选值时意外收到 fatal error ..

我正在尝试加载 JSON 数据以供评论在PopularShotsCollectionViewController中

    import UIKit
import FMMosaicLayout

private let reuseIdentifier = "Cell"

class PopularShotsCollectionViewController: UICollectionViewController {
private var shots : [Shot] = [Shot](){
didSet{
self.collectionView?.reloadData()
}
}


var API_URL = Config.SHOT_URL
var shotPages = 1


var shot : Shot!
var comments : [Comment] = [Comment]()
var tableView : UITableView!

override func viewDidLoad() {
super.viewDidLoad()


let layout : FMMosaicLayout = FMMosaicLayout()
self.collectionView?.collectionViewLayout = layout

// Do any additional setup after loading the view.
self.title = "Popular"
self.API_URL = Config.POPULAR_URL
self.loadShots()
self.loadComments()

}

func loadComments(){
// When i debug shot.commentsUrl does not return nil
DribbleObjectHandler.getComments(shot.commentsUrl) { (comments) -> Void in
self.comments = comments
}
}

但我收到此错误: The Log which shows the error

getCommentsMethod 的代码

  class func getComments(commentsUrl : String, completion:(([Comment]) -> Void)) {
var comments = [Comment]()
let url = commentsUrl + "&access_token=" + Config.ACCESS_TOKEN

HttpService.getJSON(url) { (jsonData) -> Void in

for commentData in jsonData {
let comment = Comment(data: commentData as! NSDictionary)
comments.append(comment)
}
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0), { () -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
completion(comments)
})
})
}
}

HttpService 的代码

import Foundation
import UIKit
import Alamofire

class HttpService {
class func getJSON(url: String, callback:((NSArray) -> Void)) {
let nsURL = NSURL(string: url)!
Alamofire.request(.GET, nsURL).response { (request, response, data, error) -> Void in
if error != nil{
print("error")
}

if data != nil {
let jsonData = (try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)) as! NSArray
print(jsonData)
callback(jsonData)
}
}
}
}

如果您需要更多代码来解决问题,我非常高兴

在PopularShotsCollectionViewController中我也一直在加载镜头用同样的方法

 func loadShots(){

DribbleObjectHandler.getShots(API_URL) { (shots) -> Void in
self.shots = shots
}
}

但我没有收到任何错误并且它工作完美get Shots 的代码是相同的。只需我们访问 loadShots 中的 Shot 类,然后访问 loadComments 中的 Comment 类

评论类

import Foundation
import UIKit

class Comment {

var id : Int!
var body : String!
var date : String!

var user : User!

init(data : NSDictionary){

self.id = data["id"] as! Int
let bodyHTML = Utils.getStringFromJSON(data, key: "body")
self.body = Utils.stripHTML(bodyHTML)

let dateInfo = Utils.getStringFromJSON(data, key: "created_at")
self.date = Utils.formatDate(dateInfo)

if let userData = data["user"] as? NSDictionary {
self.user = User(data: userData)
}
}
}

射击类代码

import Foundation

class Shot: DribbbleBase {

var imageUrl : String!
var htmlUrl : String!
var commentsUrl : String!
var bucketsUrl : String!
var likesUrl : String!
var attachmentUrl : String!
var reboundUrl : String!

var title : String!
var date : String!
var description : String!
var commentCount : Int!
var viewsCount : Int!
var likesCount : Int!
var bucketsCount : Int!
var attachmentsCount : Int!
var reboundCount : Int!

var user : User!

override init(data: NSDictionary) {
super.init(data: data)

self.commentCount = data["comments_count"] as! Int
self.likesCount = data["likes_count"] as! Int
self.viewsCount = data["views_count"] as! Int
self.bucketsCount = data["buckets_count"] as! Int
self.attachmentsCount = data["attachments_count"] as! Int
self.reboundCount = data["rebounds_count"] as! Int

self.commentsUrl = Utils.getStringFromJSON(data, key: "comments_url")
self.bucketsUrl = Utils.getStringFromJSON(data, key: "buckets_url")
self.likesUrl = Utils.getStringFromJSON(data, key: "likes_url")
self.title = Utils.getStringFromJSON(data, key: "title")
self.attachmentUrl = Utils.getStringFromJSON(data, key: "attachments_url")
self.reboundUrl = Utils.getStringFromJSON(data, key: "rebounds_url")

let dateInfo = Utils.getStringFromJSON(data, key: "created_at")
self.date = Utils.formatDate(dateInfo)

let desc = Utils.getStringFromJSON(data, key: "description")
self.description = Utils.stripHTML(desc)

let images = data["images"] as! NSDictionary
self.imageUrl = Utils.getStringFromJSON(images, key: "normal")

//let tags = data["tags"] as! NSArray

if let userData = data["user"] as? NSDictionary {
self.user = User(data: userData)
}
}
}

和 DribbbleBase 的代码

import Foundation

class DribbbleBase {
var id: Int

init(data: NSDictionary){
self.id = data["id"] as! Int
}
}

请帮助我..请记住我对 Swift 还很陌生

提前致谢雅利安人

最佳答案

您在PopularShotsCollectionViewController中声明了shot属性,但没有初始化它,因此shot为零。然后您尝试访问 shot 的 commentsUrl 属性,该属性在 loadComments 方法中为 nil 。您应该在 View Controller 的 init 或 view did load 方法中实例化 shot

关于ios - 加载注释时解包可选值时出现意外 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35826358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com