2017-03-16 12 views
0

私はSwiftを初めて使用しています。私のWebサイトからJSONデータを読み取るテーブルを作成しようとしています。私はいくつかのチュートリアルに続き、私のコードをテーブルコントローラで動作させることができました。今私は内部のテーブルビューでビューコントローラを使用しようとしているので、私はよりカスタマイズすることができます。私の問題は、新しいコードを使用しようとするとデータが実際に表示されないということです。JSONを外部サーバーからSwift tableViewに接続する

これは私が私のviewController.swiftに持っているものです。

import UIKit 

class ViewController: UIViewController { 

@IBOutlet weak var tableView: UITableView! 
var TableData:Array<String> = Array <String>() 


override func viewDidLoad() { 
    super.viewDidLoad() 

    get_data_from_url("http://www.stevenbunting.org/Alliris/service.php") 
} 



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

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


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

    cell.textLabel?.text = TableData[indexPath.row] 

    return cell 
} 






func get_data_from_url(_ link:String) 
{ 
    let url:URL = URL(string: link)! 
    let session = URLSession.shared 

    let request = NSMutableURLRequest(url: url) 
    request.httpMethod = "GET" 
    request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData 


    let task = session.dataTask(with: request as URLRequest, completionHandler: { 
     (
     data, response, error) in 

     guard let _:Data = data, let _:URLResponse = response , error == nil else { 

      return 
     } 


     self.extract_json(data!) 


    }) 

    task.resume() 

} 


func extract_json(_ data: Data) 
{ 


    let json: Any? 

    do 
    { 
     json = try JSONSerialization.jsonObject(with: data, options: []) 
    } 
    catch 
    { 
     return 
    } 

    guard let data_list = json as? NSArray else 
    { 
     return 
    } 


    if let countries_list = json as? NSArray 
    { 
     for i in 0 ..< data_list.count 
     { 
      if let country_obj = countries_list[i] as? NSDictionary 
      { 
       if let country_name = country_obj["user"] as? String 
       { 
        if let country_code = country_obj["friendlist"] as? String 
        { 
         TableData.append(country_name + " [" + country_code + "]") 
        } 
       } 
      } 
     } 
    } 



    DispatchQueue.main.async(execute: {self.do_table_refresh() 

    }) 

} 

func do_table_refresh() 
{ 
    self.tableView.reloadData() 

} 


} 
+0

ViewControllerをtableViewのデータソースとして設定しましたか?おそらくあなたのViewControllerコードが[UITableViewDataSource-protocol](https://developer.apple.com/reference/uikit/uitableviewdatasource)を実装していないためです) –

答えて

0

おそらくあなたはのtableViewのDataSourceを設定しませんでした。これを行うには、のViewControllerクラスでUITableViewDataSource-protocolを実装し、例えば、viewDidLoad()selfへのtableViewのDataSourceプロパティを設定し-:

class ViewController: UIViewController, UITableViewDataSource { 
// ... 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     tableView.dataSource = self 
     // ... 
    } 
    //... 
} 

ああ、とApple交通セキュリティの設定を忘れないでください、それ以外の場合は、iOSがHTTPをもう許可しないため、何も表示されません。HTTPSを使用しています。これを処理する正しい方法は、ドメインのSSL証明書を取得することです。

クイックアンドダーティーで絶対にお勧めしない方法はdisable ATS or to set an exception for certain, trustworthy domainsです。

関連する問題