当到达tableview Swift 4的最后一个元素时,添加新项时TableView崩溃

时间:2018-02-11 15:00:01

标签: ios uitableview swift4

我有一个var merge = require('merge-stream'); // Old bower behavior would be "*" in before and "" in after but you don't want that much. var webpackages = { "requirejs": {"bin/*": "bin/" } // ... } gulp.task("dist_lib", function() { var streams=[]; for (var package in webpackages) for (var item in webpackages[package]) streams.push(gulp.src("node_modules/" + package + "/" + item) .pipe(gulp.dest("lib/" + package + "/" + webpackage[package][item]))); } ,它会在应用开始时显示20个项目,然后当滚动到底部时,会从服务器中提取另外20个项目并显示到tableView

首先,我打电话给我,以便在我的TableView中显示第一个20项,这是正常的

tableview

这是TableView函数,它是标准的

   var posts = [Item]() 

//here is the latest 20 posts
    func fetchPost(itemId : Int){
        Alamofire.request(MY_URL!, method: .get).responseJSON{
            response in
            switch response.result{
            case .success(let result):
                //here parse the JSON.
                let json = JSON(result)
                guard let feedArr = json["item"].array else{
                    return
                }

                for item in feedArr {
                    if let item = item.dictionary,let feed = Item.init(dict: item){
                        self.posts.append(feed)
                    }
                }

                self.myTableView.reloadData()

                break
            case .failure(let error):
                print(error)
            }
        }
    }

我在func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.posts.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "MyTableCell", for: indexPath) as! MyTableCellClass cell.posts = self.posts[indexPath.row] cell.delegate = self return cell } 的最后一项获得Id,并使用顶部的TableView方法获取下一个20项

fetchPost()

但现在当我到达TableView的底部时,让func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { if indexPath.row + 1 == posts.count { //here is the last item of the feed let lastPostId = self.posts[indexPath.row].postId self.fetchPost(postId: lastPostId) } } 有效,并从服务器获取响应,但应用程序崩溃并继续发出此错误:

  

线程1:发出信号SIGABRT< - AppDelagate类中的这个

     

libc ++ abi.dylib:以未捕获的类型异常终止   NSException(lldb)<< - 在控制台中

除此之外,当我继续向下滚动,然后我再次向上滚动时,同样的错误也出现了,并且TableViewCell中的所有元素都移动混乱(意味着与我在故事板中组织的不一样)

到目前为止我做了什么

检查lastPostIdIBOutlet的关联是否与IBAction类相关联..已选中,已全部连接

所以我的问题是

1)TableView中出现此错误的原因是什么,我知道这是一个非常普遍的错误,但是如何通过xcode中的这些小信息解决这个问题呢?我不知道哪一行代码导致了这个问题。

2)在同一MyTableCell中显示具有相同结构的下一个20项的正确方法是什么?

请帮忙。谢谢你

0 个答案:

没有答案