2017-09-10 4 views
0

여기에 코드 첨부. 이것은 API입니다 : 내가 추가 걸려표보기에 대한 API, 열 추가 및 새로 고침

"https://bittrex.com/api/v1.1/public/getmarketsummaries"가 "높음"및 "MarketName"옆에 열의 "낮은" 은 또한, 나는이 10 초마다 새로 고침합니다.

sendUpdateRequest()에 대해 새로 고침 부분에 오류가 발생했습니다.

전체 코드는 다음과 같습니다

은 첫째, 당신은 viewDidLoad() 내부 sendUpdateRequest()을 정의 : 여기에 코드 문제의

import UIKit 
var listData = [[String : AnyObject]]() 

class DemoJsonTableViewController: UITableViewController { 
    var listData = [[String : AnyObject]]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     var timer : Timer? = nil 
     timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: (#selector(self.sendUpdateRequest)), userInfo: nil, repeats: true) 

     func sendUpdateRequest(){ 
      let url:String = "https://bittrex.com/api/v1.1/public/getmarketsummaries" 

      let urlRequest = URL(string: url) 

      URLSession.shared.dataTask(with: urlRequest!) { (data, response, error) in 
       if(error != nil){ 
        print(error.debugDescription) 
       } 
       else{ 
        do{ 
         var response = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:AnyObject] 
         self.listData = response["result"] as! [[String:AnyObject]] 
         DispatchQueue.main.async { 
          self.tableView.reloadData() 
         } 
        }catch let error as NSError{ 
         print(error) 
        } 
       } 
       }.resume() 
     } 
    } 

    // MARK: - Table view data source 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 

     let item = self.listData[indexPath.row] 
     cell.textLabel?.text = item["MarketName"] as? String 
     let lastValue = item["Last"] as? NSNumber 
     cell.detailTextLabel?.text = lastValue?.stringValue 
     print(self.listData.count) 

     return cell 
    } 

답변

0

이것이 필요한 것입니다. 복사하여 전체 코드를 붙여 넣습니다.

import UIKit 

class DemoJsonTableViewController: UITableViewController { 

    var listData = [[String : AnyObject]]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.register(DrawerCell.self, forCellReuseIdentifier: "Cell") 
     self.sendUpdateRequest() 
     Timer.scheduledTimer(timeInterval: 10, target: self, selector: (#selector(self.sendUpdateRequest)), userInfo: nil, repeats: true) 

    } 


    func sendUpdateRequest(){ 
     let url:String = "https://bittrex.com/api/v1.1/public/getmarketsummaries" 

     let urlRequest = URL(string: url) 

     URLSession.shared.dataTask(with: urlRequest!) { (data, response, error) in 
      if(error != nil){ 
       print(error.debugDescription) 
      } 
      else{ 
       do{ 
        var response = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:AnyObject] 
        self.listData = response["result"] as! [[String:AnyObject]] 
        DispatchQueue.main.async { 
         self.tableView.reloadData() 
        } 
       }catch let error as NSError{ 
        print(error) 
       } 
      } 
      }.resume() 
    } 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    // MARK: - Table view data source 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! DrawerCell 

     let item = self.listData[indexPath.row] 
     cell.TitleLabel.text = item["MarketName"] as? String 
     cell.Description.text = String(describing: item["Last"] as? NSNumber) 
     cell.HighLabel.text = String(describing: item["High"] as! NSNumber) 
     cell.LowLabel.text = String(describing: item["Low"] as! NSNumber) 
     return cell 
    } 

} 




class DrawerCell: UITableViewCell { 

    var TitleLabel: UILabel = UILabel() 
    var Description: UILabel = UILabel() 
    var HighLabel: UILabel = UILabel() 
    var LowLabel: UILabel = UILabel() 


    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 

     TitleLabel.textColor = UIColor.black 
     TitleLabel.font = UIFont.init(name: "AppleSDGothicNeo-Bold", size: 10) 
     TitleLabel.textAlignment = .left 
     contentView.addSubview(TitleLabel) 

     Description.textColor = UIColor.black 
     Description.font = UIFont.init(name: "AppleSDGothicNeo-Bold", size: 8) 
     Description.textAlignment = .left 
     contentView.addSubview(Description) 

     HighLabel.textColor = UIColor.black 
     HighLabel.font = UIFont.init(name: "AppleSDGothicNeo-Bold", size: 10) 
     HighLabel.textAlignment = .center 
     contentView.addSubview(HighLabel) 

     LowLabel.textColor = UIColor.black 
     LowLabel.font = UIFont.init(name: "AppleSDGothicNeo-Bold", size: 10) 
     LowLabel.textAlignment = .center 
     contentView.addSubview(LowLabel) 

    } 

    override func layoutSubviews() { 
     super.layoutSubviews() 

     TitleLabel.frame = CGRect(x: 10, y: 0, width: self.frame.size.width - 110, height: 20) 

     Description.frame = CGRect(x: 10, y: 20, width: self.frame.size.width - 110, height: 20) 

     HighLabel.frame = CGRect(x: self.frame.size.width - 110, y: 0, width: 100, height: 20) 

     LowLabel.frame = CGRect(x: self.frame.size.width - 110, y: 20, width: 100, height: 20) 

    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 


    override public func prepareForReuse() { 

     TitleLabel.text = nil 
     Description.text = nil 
     HighLabel.text = nil 
     LowLabel.text = nil 

    } 
} 
+0

이것은 완벽합니다. 나는이 프로젝트를 완수 할 절실히 필요하다. [email protected]에 저에게 연락을 주시면 전체 프로젝트를 보상 해 드리고 싶습니다. 다시 한 번 감사드립니다. –

0

커플. 이 괄호 밖의 전체 기능을 이동하여 오류를 제거하십시오. 둘째, listData을 클래스 외부에 정의 할 필요가 없습니다.

그런 다음 새로 고침 기능을 위해 기존 코드를 사용할 수 있습니다.

높음 및 낮음 열에 대해서는 UITableViewCell의 하위 클래스를 만들고 추가 레이블을 추가해야합니다.

여기에 설명 된 단계를 따르십시오 : How to add more than two labels to prototype cell?.