gpt4 book ai didi

ios - iOS 数组索引超出范围

转载 作者:行者123 更新时间:2023-11-30 13:35:31 26 4
gpt4 key购买 nike

大家好,我一直遇到错误“数组索引超出范围”。我从互联网获取 JSON 数据并将其转换为数组。我一直在加载评论(注意:我发布了这个问题,因为我找不到与我的问题相关的任何问题)

所以我一直在 jsonData 中加载评论。我用来加载评论的代码是这样的。

api.loadComments(shot.commentsUrl, completion: didLoadComments)

补全代码是这样的。

func didLoadComments(comments : [Comment]){
self.comments = comments
self.tableView.reloadData()
}

它是在tableView中定义的...

let cell = tableView.dequeueReusableCellWithIdentifier("Cell10", forIndexPath: indexPath) as! CommentCell

//This is where the error occurs
let comment = comments[indexPath.row]
cell.nameLabel.text = comment.user.name
cell.commentLabel.text = comment.body
cell.avatarImageView.sd_setImageWithURL(NSURL(string: comment.user.avatarUrl), placeholderImage: UIImage(named: "2"))
return cell

comments 变量的定义如下。

var comments : [Comment] = Comment

loadComments 方法正在返回日志中所示的注释

The log which shows comments is not nil

loadComments 的代码是这样的。

func loadComments(commentsUrl: String, completion: (([Comment]) -> Void)!) {
let urlString = commentsUrl + "?access_token=" + Config.ACCESS_TOKEN

let session = NSURLSession.sharedSession()
let url = NSURL(string: urlString)
let task = session.dataTaskWithURL(url!) {
(data, response, error) -> Void in
if error != nil {
print(error!.localizedDescription)
} else {
var comments = [Comment]()
do {
let commentsData = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSArray
for commentData in commentsData {
let comment = Comment(data: commentData as! NSDictionary)
comments.append(comment)
}
}
catch {
}

let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
dispatch_async(dispatch_get_main_queue()) {
completion(comments)
}
}
}
task.resume()
}

numberOfRowsInSection 看起来像这样。

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 9 + comments.count
}

请随时向我索要更多代码。

提前致谢雅利安人

最佳答案

该问题的原因是:

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

此方法返回您的项目计数。还有你的方法

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! CommentCell


return cell
}

将循环运行此列表中的每个项目。您应该检查方法“numberOfRowsInSection”中的项目计数和“cellForRowAtIndexPath”中的项目计数

已编辑:

当然,你做到了。

return 9 + comments.count

如果您的评论数为0,您的有趣的cellForRowAtIndexPath将调用9次!使用

comments.count

或者在您的代码中添加一些检查。

关于ios - iOS 数组索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36119483/

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