【问题标题】:alamofireobjectmapper requestObject cant make correct request and mappingalamofireobjectmapper requestObject 无法做出正确的请求和映射
【发布时间】:2017-01-19 01:04:56
【问题描述】:

您好,我遇到了解析问题。

当我尝试在我的 tableviewcell 中解析 this JSON 时 并且无法得到我需要的值。

我的要求:

    let videos = NewestVideos()
    let URL = "https://api.vid.me/channel/1/new"


    override func viewDidLoad() {
        super.viewDidLoad()

        Alamofire.request(.GET, self.URL).responseObject { (response: Response<NewestVideos, NSError>) in

            switch response.result {
            case .Success(self.videos):
                print("")
            case .Failure(let error):
                    print("Request failed with error: \(error)")

            }
        }
    }


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

        cell.newVideoNameLabel.text = resultr


        return cell
    }

如何获取 tableviewcell 中的值,并发出正确的请求?

我通过 ObjectMapper 进行的映射:

    class Videos: Mappable {
    var embedUrl: String?
    var title: String?

    required init?(_ map: Map){

    }
    func mapping(map: Map) {
        embedUrl <- map["embed_url"]
        title <- map["title"]

    }
}

class NewestVideos: Mappable {
    var videos: [Videos]? = []


    required init?(_ map: Map){

    }
    func mapping(map: Map) {
        videos <- map["videos"]
    }
}

【问题讨论】:

    标签: json swift alamofire objectmapper


    【解决方案1】:

    您的可映射类看起来不错,除了视频应该是视频。

    class Video: Mappable {
    
        var embedUrl: String?
        var title: String?
    
        required init?(_ map: Map) {}
    
        func mapping(map: Map) {
            embedUrl <- map["embed_url"]
            title <- map["title"]
        }
    }
    
    class NewestVideos: Mappable {
    
        var videos: [Video]? = []
    
        required init?(_ map: Map) {}
    
        func mapping(map: Map) {
            videos <- map["videos"]
        }
    }
    

    接下来在你的控制器中,你用你的 switch 语句做了一些奇怪的事情。您应该让响应结果为.Some,然后将self.videos 设置为newest.videos

    class ViewController: UIViewController, ... {
    
        ...
    
        var videos = [Video]() {
            didSet {
                tableView.reloadData()
            }
        }
    
        ...
    
        override func viewDidLoad() {
    
            super.viewDidLoad()
    
            let request = Alamofire.request(.GET, "https://api.vid.me/channel/1/new")
    
            request.responseObject { (response: Response<NewestVideos, NSError>) in
    
                switch response.result {
                case .Success(let newest):
                    self.videos = newest.videos
                case .Failure(let error):
                    print("Request failed with error: \(error)")
                }
            }
        }
    
        ...
    
        override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
            let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! NewTableViewCell
            let video = self.videos[indexPath.row]
    
            cell.newVideoNameLabel.text = video.name
    
            return cell
        }
    
        ...
    }
    

    【讨论】:

    • 哦,谢谢你它必须工作,但我还有一个问题,我必须让 reloadData() 看到变化
    • 我不明白我的应用程序崩溃我认为 tabbarcontroller 与 tableviewcontroller?
    • 当我尝试重新加载数据时
    猜你喜欢
    • 2016-01-12
    • 1970-01-01
    • 2018-09-12
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 2016-08-21
    • 2012-06-06
    相关资源
    最近更新 更多