2016-05-07 5 views
1

私は、サーバーからJSONデータをリフレッシュするために、テーブルビューにPull to Refreshを実装しようとしていました。私がデバッグエリア画面で試したことは、データのリロードが表示されますが、サーバー上のPHPファイルを変更すると、セルのラベルとイメージが更新されません。コードを使用しています:Pull to Refresh JSONデータをリフレッシュしない

あなたは、コードの以下のようなあなたのテーブルビュー内でリフレッシュすることを考慮して

var refreshControl = UIRefreshControl() 

をプルを追加することができます

import UIKit 

    class JSONData: UITableViewController {  

    var newsList = [News]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.loadJSONDATA() 

    } 


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

// MARK: - Table source 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // #warning Potentially incomplete method implementation. 
    // Return the number of sections. 

    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete method implementation. 
    // Return the number of rows in the section. 
    return newsList.count 


} 


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 


    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! NewsStrings 

    let s = newsList[indexPath.row] as News 

    cell.labellName.text = s.newsName 
    cell.labelDesc.text = s.newsDesc 
    cell.labelDate.text = s.newsDate 
    cell.imgvImage.image = UIImage(named: "BgIcon.jpg") 

    if let img = UIImage(data: s.newsImage) 
    { 
     cell.imgvImage.image = img 
    }else 
    { 
     self.loadImages(s, indexPath: indexPath) 
    } 



    return cell 

} 


///////////////// JSON DATA //////////////////////// 


func loadJSONDATA() 
{ 
    let urlString = "http://example.com/folder/JSON.php" 

    let config = NSURLSessionConfiguration.defaultSessionConfiguration() 
    let session = NSURLSession(configuration: config, delegate:nil, delegateQueue: nil) 

    if let url = NSURL(string: urlString) 
    { 

     let request = NSURLRequest(URL: url) 

     let taskData = session.dataTaskWithRequest(request, completionHandler: { 

      (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in 


      if (data != nil) 
      { 

       var parseError:NSError? 
       let parsedNews = (try! NSJSONSerialization.JSONObjectWithData(data!, options: [])) as! NSDictionary 

       //print("JSON Data \n \(parsedNews)") 

       if let news:AnyObject = parsedNews["News"] 
       { 
        self.parseJSON(news) 
       } 


      } else 

      { 



      } 

     }) 

     taskData.resume() 


    } 

} 



/////////// LODING JSON DATA ////////////// 

func parseJSON(jsonData:AnyObject) 
{ 

    if let newsData = jsonData as? [[NSObject:AnyObject]] 
    { 

     var news:News 


     for s in newsData { 

      news = News() 


      if let sId:AnyObject = s["NewsID"] 
      { 

       if let NewsID = sId as? String 

       { 
        print("News id = \(NewsID)") 

       } 

      } 


      if let sn:AnyObject = s["newsName"] 
      { 

       if let newsName = sn as? String 

       { 

        news.newsName = newsName 
        //println("Store id = \(storeName)") 

       } 

      } 

      if let sn:AnyObject = s["newsDate"] 
      { 

       if let newsDate = sn as? String 

       { 

        news.newsDate = newsDate 
        //println("Store id = \(storeName)") 

       } 

      } 


      if let sn:AnyObject = s["newsIcon"] 
      { 

       if let newsIcon = sn as? String 

       { 

        news.newsImageName = newsIcon 
        //println("News Icon = \(newsIcon)") 

       } 

      } 


      if let sn:AnyObject = s["newsDesc"] 
      { 

       if let newsIcon = sn as? String 

       { 

        news.newsDesc = newsIcon 

       } 

      } 


     newsList += [news] 


     } 


     NSOperationQueue.mainQueue().addOperationWithBlock(){ 

      UIApplication.sharedApplication().networkActivityIndicatorVisible = false 
      self.tableView.reloadData() 
     }  
    } 
} 


/////////// LODING IMAGES FROM JSON DATA ////////////// 

func loadImages(news:News, indexPath:NSIndexPath) 
{ 

    let urlString = news.newsImageName 


    let config = NSURLSessionConfiguration.defaultSessionConfiguration() 
    let session = NSURLSession(configuration: config, delegate:nil, delegateQueue: nil) 


    if let url = NSURL(string: urlString) 
    { 
     let request = NSURLRequest(URL: url) 

     let taskData = session.dataTaskWithRequest(request, completionHandler: { 

      (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in 


      if (data != nil) 
      { 

       news.newsImage = data! 
       let image = UIImage(data: data!) 

       dispatch_async(dispatch_get_main_queue(),{ 

        if let cell = self.tableView.cellForRowAtIndexPath(indexPath) as? NewsStrings { 
         cell.imgvImage.image = image 
        } 
       }) 



      } else 

      { 


      } 

     }) 

     taskData.resume() 
    } 
    } 

    } 

答えて

0

は負荷をした、

self.refreshControl.addTarget(self, action: Selector("loadJSONDATA"), forControlEvents: UIControlEvents.ValueChanged) 
self.addSubview(self.refreshControl) // OR self.myTable?.addSubview(self.refreshControl) 

はその後self.parseJSON(ニュース)の後に、この行を追加します

self.refreshControl.endRefreshing() 

これはあなたに役立つでしょう。私はそれを動作させるために何かを持って

+0

私はこれを試してみましたが、サーバ上でPHPファイルを追加または変更すると表セルのラベルと画像の飾りがリフレッシュされません – DevKid

+0

ブレークポイントを使って確認しましたか?コンパイラがいくつかの行を見ているかどうか、テーブルビューを再読み込みする –

0

:)、これは私が私のviewDidLoadに持っているものです。handleRefreshため

self.refreshControl?.addTarget(self, action: #selector(NewsList.handleRefresh(_:)), forControlEvents: UIControlEvents.ValueChanged) 

機能:

func handleRefresh(refreshControl: UIRefreshControl) { 

newsList.removeAll() //<-This clear the whole tableview(labels, images,ect...)making table view blank 

if self.refreshControl!.refreshing 
{ 
    self.loadRecords() //<-Reloads All data & labels 
    self.refreshControl!.endRefreshing() 
} 
} 

唯一のことは、アプリということです"Pull to refresh"の倍数を実行した後にクラッシュする

関連する問題