2017-03-06 4 views
0

私はこのエラーを取得する:スウィフトテーブルビューのリフレッシュエラー

image 1

これは私のコードです: image 2

私はプロジェクトののtableViewセクションでリフレッシュを使用しています。リフレッシュ中にこのエラーが発生する原因は何ですか?

But in which phase it falls to the fault I could not solve that part

var kategoriId = "" 
    var refresher = UIRefreshControl() 

    var arrayKonularData = [konularData]() 
    let singleton = konularClass.sharedGlobal 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     refresher.attributedTitle = NSAttributedString(string: "Yükleniyor") 
     refresher.addTarget(self, action: #selector(KonuDetayViewController.refresh), for: UIControlEvents.valueChanged) 
     self.tableview.addSubview(refresher) 


     KonulariGetir(sirala: "order by tarih desc") 
     navigationController?.delegate = self 
     tableview.layer.cornerRadius = 10 
    } 
    func refresh() 
    { 
     DispatchQueue.main.async { 
      if self.segmentControl.selectedSegmentIndex == 0 
      { 
       self.arrayKonularData.removeAll() 
       self.KonulariGetir(sirala: "order by tarih desc") 
      } 
      if self.segmentControl.selectedSegmentIndex == 1 
      { 
       self.arrayKonularData.removeAll() 
       self.KonulariGetir(sirala: "order by indirimpuani desc") 
      } 

     } 
       DispatchQueue.main.async { 
      self.refresher.endRefreshing() 
     } 

    } 

I am taking data from web service in this section

func KonulariGetir(sirala:String) 
    { 
     var request = URLRequest(url: URL(string:"http://212.xxx.xxx.xxx:7001/IndirimiKovala/KonuGetir")!) 
     request.httpMethod = "POST" 
     let postString = "filtre="+sirala 
     request.httpBody = postString.data(using: .utf8) 
     let task = URLSession.shared.dataTask(with: request) { (data, response, error) in 

      if error != nil 
      { 
       print("error") 
      } 

      if let urlContent = data 
      { 

       do 
       { 
        let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject 

        if let gelenDizi = jsonResult as? NSArray 
        { 
         for i in 0..<gelenDizi.count 
         { 

          if let baslik = (gelenDizi[i] as? NSDictionary)?["baslik"] as? String 
          { 
           self.singleton.baslik = baslik 
          } 

          if let indirimPuani = (gelenDizi[i] as? NSDictionary)?["indirimpuani"] as? Int 
          { 
           self.singleton.indirimPuani = String(indirimPuani) 
          } 
          if let konuId = (gelenDizi[i] as? NSDictionary)?["id"] as? Int 
          { 
           self.singleton.konuId = String(konuId) 
          } 
          if let haberVeren = (gelenDizi[i] as? NSDictionary)?["uye"] as? String 
          { 
           self.singleton.haberVerenUye = haberVeren 
          } 
          if let gelenTarih = (gelenDizi[i] as? NSDictionary)?["tarih"] as? String 
          { 
           self.singleton.tarih = gelenTarih 
          } 
          if let gelenAktif = (gelenDizi[i] as? NSDictionary)?["aktif"] as? Int 
          { 
           self.singleton.aktif = gelenAktif 
          } 


          self.arrayKonularData.append(konularData.init(baslik: self.singleton.baslik, indirimPuani: self.singleton.indirimPuani, konuId: self.singleton.konuId,haberVeren:self.singleton.haberVerenUye , tarih:self.singleton.tarih,aktif:self.singleton.aktif)) 


         } 

        } 
        DispatchQueue.main.async { 
         self.tableview.reloadData() 
        } 


       } 
       catch 
       { 
        print("server hatası") 
       } 
      } 
     } 
     task.resume() 
    } 
+1

でテーブルビューを再ロードします。 –

+0

コンソールのエラーに「索引が範囲外です」と表示されるため。 。 。 また、サブビューとして 'UIRefreshControl'を追加しません。使用している 'UITableView'に' refreshControl'プロパティがあります。 http://cleanswifter.com/uirefreshcontrol-in-ios10/。 (それが問題の一部であるかどうか分かりませんが、修正する価値があります) – shim

+1

コンソールに範囲外のエラーがあります。 – vadian

答えて

0

私はこの問題は、あなたがテーブルビューを移入しようとしたコードの一部から来ていると思います。だから、可能な解決策は、のtableViewにすることができ(_のtableView:のUITableView、cellForRowAt indexPath:IndexPath)デリゲートMethodeのチェックがarrayKonularData配列は、この

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


     if !arrayKonularData.isEmpty { 
      .....// Your code 
     } 

     return cell 
    } 

ように私の事は中右のソリューションとなります(これは別の解決策を空にされていない場合は、あなたのケース)コードの写真を疑問にコードを追加していないしてください

func KonulariGetir(sirala:String) 

の補完機能を追加し、完了方法

+0

'arrayKonularData'が空の場合、' numberOfRows'は0を返し、 'cellForRow'はまったく呼び出されません。 – vadian

+0

はい、そうです。だから問題はその部分から来ていません。質問に提供されたコードの部分から、このエラーの原因となるものを見つけるのは難しい –

+0

インターネットが遅い場合、このエラーが発生します –

関連する問題