2016-04-25 3 views
0
import UIKit 
import Alamofire 
import SwiftyJSON 

class RecentAdded: UIViewController ,UITableViewDataSource,UITableViewDelegate{ 

    @IBOutlet var tableView: UITableView! 
    var list:JSON! 
    var sendurl:String! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     Alamofire.request(.GET, "http://api.dirble.com/v2/stations/recent", parameters: ["token": "260674ecb51572a8faa4e77199"]) 
     .responseJSON { response in 
      if let json = response.result.value { 
       self.list = JSON(data: response.data!) 
       print(self.list) /// Showing less element if element is more than 25 
       self.tableView.dataSource = self 
       self.tableView.delegate = self 
       self.tableView.reloadData() 
       print(self.list.arrayValue.capacity) // Printing the actual capacity 
      } 
     } 

     // Do any additional setup after loading the view. 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return self.list.arrayValue.capacity 

    } 

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


     let sampleArray = self.list.array 
     let imageURL:String! = sampleArray![indexPath.row]["image"]["thumb"]["url"].stringValue 
     if imageURL != ""{ 
      Alamofire.request(.GET, imageURL).responseImage { (response) -> Void in 
       guard let image = response.result.value else { return } 
       cell.img!.image = image 
      } 

     }else{ 
      cell.img!.image = UIImage(named: "rad")! 
     } 

     cell.nm?.text = sampleArray![indexPath.row]["name"].stringValue 
     let catarr = sampleArray![indexPath.row]["categories"].array 
     let des:String! = "category : " + catarr![0]["title"].stringValue + " " + "slug : " + catarr![0]["slug"].stringValue 
     cell.des?.text = des 

     return cell 
    } 

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

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let cell = tableView.cellForRowAtIndexPath(indexPath) as! RecentCellTableViewCell 
     let sampleArray = self.list.array 
     let url = sampleArray![indexPath.row]["streams"].array 
     sendurl = url![0]["stream"].stringValue 
     self.performSegueWithIdentifier("next", sender: self) 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     // 
     if (segue.identifier == "next") { 
      // initialize new view controller and cast it as your view controller 
      var viewController = segue.destinationViewController as! Player 
      viewController.urll = sendurl 

     } 

    } 
} 

私の問題は、私がlist.arrayvalue.capacityを印刷しているときです。正しい配列のサイズを表示していますが、配列の要素を表示しようとすると表示される要素が少なくなります。だから私はコードで何が間違っているか分かりませんか?/swiftyjsonの使用中に、配列の項目数と配列の要素数が一致していませんか?

主な問題は、印刷要素です。すべての要素を印刷しません。

+1

これは、データソースアレーとして(Swifty)JSONオブジェクトを使用するためにはかなり高価です。オブジェクトは常に 'numberOfRowsInSection'と' cellForRowAtIndexPath'で変換されなければなりません。アレイのサイズによっては、パフォーマンスが低下する可能性があります。 – vadian

+0

提案をいただきありがとうございます私は私のコードを更新します。 –

答えて

2

あなたは実際のアイテム数と配列の容量を混同していると思います。この回答では、容量対数について

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return self.list.arrayValue.count 
} 

詳細:numberOfRowsInSectionについては、配列の代わりにcountプロパティを使用Swift array.capacity vs array.count

+0

本当にありがとうございました。私は問題を解決しました。しかし、私はlist.arrayValue.capacityを別のViewControleで使用しました。そこでは項目が25より少なく、そこでは正常に動作します。なぜですか? –

+0

容量とカウントの違いは何ですか? –

+0

カウントと容量の詳細については、私の答えの一番下にあるリンクを参照してください。 –

関連する問題