2016-09-11 2 views
3

안녕하세요. 구문 분석에 문제가 있습니다.alamofireobjectmapper requestObject가 올바른 요청과 매핑을하지 못합니다.

this JSON을 내 tableviewcell 에서 구문 분석하려고 할 때 필요한 값을 가져올 수 없습니다.

내 요청 :

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"] 
    } 
} 

답변

0

당신의 맵핑 가능한 클래스 괜찮아 보여이 떨어져 비디오에서 비디오해야합니다.

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"] 
    } 
} 

컨트롤러에서 다음 스위치 문과 함께 뭔가 이상한 행동을했습니다. 응답 결과를 .Some으로 설정하고 self.videosnewest.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 
    } 

    ... 
} 
+0

오 U에게 그것의 필수 작업을 thnk하지만 난 내가 reloadData을해야 하나 개 더 질문이 있습니다() 변경 사항을 확인하는 – DmitrievichR

+0

내가 내 대답 – Callam

+0

업데이트 내가 tableviewcontroller로 tabbarcontroller을 생각하는 내 응용 프로그램 충돌을 undetstand DNT? – DmitrievichR