为什么Xcode不执行func tableView中的代码?

why Xcode do not execute the codes in func tableView?

问题: 我在tableView的函数里面设置了几个断点。然而 Xcode 并没有执行 tableView 中的代码。请告诉我如何解决这些问题。 我刚开始学习 IOS 开发,我正在尝试编写 Tweeter 展示页面的演示。期待回复!

这是扩展 UITablewViewDataSource 的代码:

extension WechatMomentViewController: UITableViewDataSource{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return viewModel.tweetList?.count ?? 0;
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let tweetCell = tableView.dequeueReusableCell(withIdentifier: "WechatMomentListCell", for: indexPath) as? WechatMomentListCell else {
            fatalError("there is no WechatMomentList")
        }
        
        let tweet = viewModel.tweetList?[indexPath.row]
        
        for i in tweet?.images ?? [] {
            let flagImage = UIImageView()
            flagImage.sd_setImage(with: URL(string: i.url))
            tweetCell.Images.append(flagImage)
        }
                
        for i in tweet?.comments ?? [] {
            let flagComment = UILabel()
            flagComment.text = "\(i.sender) : \(i.content)"
            tweetCell.comments.append(flagComment)
        }
        tweetCell.senderNick.text = tweet?.sender?.nick
        tweetCell.senderAvatar.sd_setImage(with: URL(string: tweet?.sender?.avatar ?? ""), placeholderImage: UIImage(named: "placeholder.png"))
        tweetCell.content.text = tweet?.content
        
        return tweetCell
    }
}

这里是所有 ViewController:

的代码
import UIKit
import SnapKit
import SDWebImage
import Alamofire

//
class WechatMomentViewController: UIViewController {
    
    let viewModel = WechatMomentViewModel()
    var userAvatar = UIImageView()
    var userProfileImage = UIImageView()
    var userNick = UIButton()
    var TweetCell = UITableViewCell()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        viewModel.delegate = self
        getUserProfile()
        getTweet()
    }
    
    fileprivate func getUserProfile() {
        viewModel.getUserProfile()
        view.addSubview(userProfileImage)
        userAvatar.backgroundColor = UIColor.black
        view.addSubview(userAvatar)
        userAvatar.snp.makeConstraints{ (make) in
            make.height.equalTo(80)
            make.width.equalTo(80)
            make.right.equalToSuperview().offset(-10)
            make.centerY.equalToSuperview()
        }
        userAvatar.clipsToBounds = true;
        userAvatar.layer.cornerRadius = 10;
        
        view.addSubview(userNick)
        userNick.snp.makeConstraints{ (make) in
            make.width.equalTo(90)
            make.height.equalTo(20)
            make.trailing.equalTo(userAvatar.snp.leading)
            make.centerY.equalTo(userAvatar)
        }
        
        userProfileImage.frame = CGRect(x: 0, y: 0, width: 414, height: 448)
    }
    
    fileprivate func getTweet() {
        viewModel.getTweet()
    }
}

extension WechatMomentViewController: WechatMomentVCProtocol {
    func refreshUI() {
        if let user = viewModel.user,
           let avatar = user.avatar,
           let profileImage = user.profileImage {
            userAvatar.sd_setImage(with: URL(string: avatar))
            userProfileImage.sd_setImage(with: URL(string: profileImage))
            userNick.setTitle(user.nick, for: .normal)
        }
    }

}

extension WechatMomentViewController: UITableViewDataSource{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return viewModel.tweetList?.count ?? 0;
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let tweetCell = tableView.dequeueReusableCell(withIdentifier: "WechatMomentListCell", for: indexPath) as? WechatMomentListCell else {
            fatalError("there is no WechatMomentList")
        }
        
        let tweet = viewModel.tweetList?[indexPath.row]
        
        for i in tweet?.images ?? [] {
            let flagImage = UIImageView()
            flagImage.sd_setImage(with: URL(string: i.url))
            tweetCell.Images.append(flagImage)
        }
                
        for i in tweet?.comments ?? [] {
            let flagComment = UILabel()
            flagComment.text = "\(i.sender) : \(i.content)"
            tweetCell.comments.append(flagComment)
        }
        tweetCell.senderNick.text = tweet?.sender?.nick
        tweetCell.senderAvatar.sd_setImage(with: URL(string: tweet?.sender?.avatar ?? ""), placeholderImage: UIImage(named: "placeholder.png"))
        tweetCell.content.text = tweet?.content
        
        return tweetCell
    }
}

这里是WechatMomentListCell的识别码:

import Foundation
import UIKit

class WechatMomentListCell: UITableViewCell{
    var content = UILabel()
    var senderAvatar = UIImageView()
    var senderNick = UILabel()
    var Images = [UIImageView()]
    var comments = [UILabel()]
    
    
}

添加如下内容:

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.delegate = self // if you are...
    tableView.datasource = self
    ...
}

问题是您很可能(您没有显示)有一个常规 UIViewController 而不是 UITableViewController。因此,tableview 没有委托,也没有数据源。或者,如果您使用的是故事板或 xib,您可以从 tableview 右键单击​​到控制器并在那里分配这些值。

您的 class 应该扩展 UITableViewController 而不是 UIViewController 。您还必须注册您的手机。

class WechatMomentViewController: UITableViewController {
    
        let kCellIdentifier = "CellIdentifier"
    
        override func viewDidLoad() {
            super.viewDidLoad()
            
            
            self.tableView?.register(WechatMomentListCell, forCellReuseIdentifier: kCellIdentifier)
        }
}

问题是: 首先,我没有 TableView()。所以我创建了一个新的 TableView 实例。 其次,使用

view.addSubivew(tableview)

然后,成员从您的视图模型重新加载数据。

然后...试试clean build(真的很有帮助)