Как я помещаю данные Json в метки в UITableView?

У меня есть 3 метки в пользовательской ячейке UITableview, и я пытаюсь передать данные json, полученные из API с Alamofire, но я пытаюсь понять, как вставить возвращенный json в табличное представление. Любая помощь будет принята с благодарностью. Код ниже:

import UIKit
import Parse
import Alamofire

class LeagueTableController: UIViewController, UITableViewDataSource,     UITableViewDelegate {

override func viewDidLoad() {
    super.viewDidLoad()

    Alamofire.request(.GET, "https://api.import.io/store/connector/88c66c----9b01-6bd2bb--d/_query?input=webpage/url:----") .responseJSON { response in // 1
        print(response.request)  // original URL request
        print(response.response) // URL response
        print(response.data)     // server data
        print(response.result)   // result of response serialization

        if let JSON = response.result.value {
            print("JSON: \(JSON)")
        }
    }
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
    return cell
}


}

Возвращенный JSON, как это:

  {
connectorGuid = "88c66cb4-e64f-4316-9b01-6bd2bb2d762d";
connectorVersionGuid = "8aedfe43-948a-4559-b279-d3c3c28047a4";
cookies =     (
);
offset = 0;
outputProperties =     (
            {
        name = team;
        type = URL;
    },
            {
        name = played;
        type = DOUBLE;
    },
            {
        name = points;
        type = DOUBLE;
    }
);
pageUrl = "http://www.extratime.ie/leagues/2024/100/premier-division/";
results =     (
            {
        played = 9;
        "played/_source" = 9;
        points = 22;
        "points/_source" = 22;
        team = "http://www.extratime.ie/squads/17/";
        "team/_source" = "/squads/17/";
        "team/_text" = Dundalk;
    },
            {
        played = 9;
        "played/_source" = 9;
        points = 20;
        "points/_source" = 20;
        team = "http://www.extratime.ie/squads/7/";
        "team/_source" = "/squads/7/";
        "team/_text" = "Derry City";
    },
            {
        played = 9;
        "played/_source" = 9;
        points = 17;
        "points/_source" = 17;
        team = "http://www.extratime.ie/squads/100504/";
        "team/_source" = "/squads/100504/";
        "team/_text" = "Galway United FC";
    },
            {
        played = 9;
        "played/_source" = 9;
        points = 16;
        "points/_source" = 16;
        team = "http://www.extratime.ie/squads/29/";
        "team/_source" = "/squads/29/";
        "team/_text" = "St. Patrick's Ath";
    },
            {
        played = 8;
        "played/_source" = 8;
        points = 15;
        "points/_source" = 15;
        team = "http://www.extratime.ie/squads/30/";
        "team/_source" = "/squads/30/";
        "team/_text" = "Cork City";
    },
            {
        played = 8;
        "played/_source" = 8;
        points = 15;
        "points/_source" = 15;
        team = "http://www.extratime.ie/squads/3/";
        "team/_source" = "/squads/3/";
        "team/_text" = "Shamrock Rovers";
    },
            {
        played = 9;
        "played/_source" = 9;
        points = 10;
        "points/_source" = 10;
        team = "http://www.extratime.ie/squads/13/";
        "team/_source" = "/squads/13/";
        "team/_text" = "Finn Harps";
    },
            {
        played = 9;
        "played/_source" = 9;
        points = 10;
        "points/_source" = 10;
        team = "http://www.extratime.ie/squads/2/";
        "team/_source" = "/squads/2/";
        "team/_text" = Bohemians;
    },
            {
        played = 9;
        "played/_source" = 9;
        points = 7;
        "points/_source" = 7;
        team = "http://www.extratime.ie/squads/8/";
        "team/_source" = "/squads/8/";
        "team/_text" = "Sligo Rovers";
    },
            {
        played = 9;
        "played/_source" = 9;
        points = 7;
        "points/_source" = 7;
        team = "http://www.extratime.ie/squads/6/";
        "team/_source" = "/squads/6/";
        "team/_text" = "Bray Wanderers";
    },
            {
        played = 9;
        "played/_source" = 9;
        points = 5;
        "points/_source" = 5;
        team = "http://www.extratime.ie/squads/109/";
        "team/_source" = "/squads/109/";
        "team/_text" = "Wexford Youths";
    },
            {
        played = 9;
        "played/_source" = 9;
        points = 5;
        "points/_source" = 5;
        team = "http://www.extratime.ie/squads/15/";
        "team/_source" = "/squads/15/";
        "team/_text" = "Longford Town";
    }
);

} Я пытаюсь просто выдать результаты "Play", "Points" и "Team/_text" на каждую из меток.

3 ответа

Поскольку вопрос очень широкий и не определяет, в чем именно заключается проблема, общие шаги:

1) сопоставьте свой JSON со словарем / nsdictionary. Предположим, что опубликованный вами фрагмент JSON - это фрагмент JSONArray в следующем формате [{}], все что вам нужно сделать:

var arrayOfDictionaries:NSArray = NSJSONSerialization.JSONObjectWithData(yourData, options: nil, error: nil) as! NSArray

где переменная yourData - это данные, загруженные из сети, преобразованные в формат NSData.

2) создать выходы для этих трех меток в вашей пользовательской таблице ViewCell

3) для каждой ячейки установите эти метки внутри

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)

метод следующим образом:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  let cell:YourCustomCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as YourCustomCell
  cell.firstLabel.text = yourDictionary["played"]
  cell.secondLabel.text = yourDictionary["points"]
  cell.thirdLabel.text = yourDictionary["team"]
  return cell
}

4) Полагаю, вам понадобится больше ячеек, чем одна, затем сохраните множество словарей в массиве и получите доступ к каждому элементу следующим образом:

cell.firstLabel.text = arrayOfDictionaries[indexPath.row]["played"]

Во-первых, вы должны создать модель, которая содержит 3 свойства, которые вы хотите сохранить, например:

    class Data {
    var team = ""
    var point = 0
    var teamText = ""

    init(fromJSON json: NSDictionary) {
        team = json["team"] as! String
        point = json["points"] as! Int
        teamText = json["team/_text"] as! String
    }
}

В вашем LeagueTableController создайте массив для хранения данных и покажите его в tableView:

var data = [Data]()

Настройте tableView, чтобы показать данные:

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! YourCustomCell
    let row = indexPath.row
    cell.lblA.text = data[row].team
    cell.lblB.text = "\(data[row].point)"
    cell.lblC.text = data[row].teamText
    return cell
}

Наконец, проанализируйте ваш ответ json с нашим массивом данных для отображения на tableView

@IBOutlet weak var tableView: UITableView!
var data = [Data]()

override func viewDidLoad() {
    super.viewDidLoad()

    Alamofire.request(.GET, "https://api.import.io/store/connector/88c66c----9b01-6bd2bb--d/_query?input=webpage/url:----") .responseJSON { response in // 1
        print(response.request)  // original URL request
        print(response.response) // URL response
        print(response.data)     // server data
        print(response.result)   // result of response serialization

        if let JSON = response.result.value {
            print("JSON: \(JSON)")
            // parse JSON to get array of data
            let array = JSON["results"] as! [NSDictionary]
            // map an item to a data object, and add to our data array
            for item in array {
                self.data.append(Data(fromJSON: item))
            }
            // after mapping, reload the tableView
            self.tableView.reloadData()
        }
    }
}

Надеюсь, это поможет!

Вам нужно будет создать подкласс UITableViewCell, сказать MyTableViewCell и добавьте свойство с именем JSON,

Теперь, поскольку вы, вероятно, используете Interface Builder для определения своей ячейки и ее идентификатора повторного использования ("Ячейка"), установите класс этой ячейки для вновь созданного MyTableViewCell и подключить ярлыки к некоторым IBOutlets в вашем новом определенном классе.

Затем, когда вы вызываете 'dequeueReusableCellWithIdentifier', приведите ячейку к MyTableViewCell и установить его JSON свойство к значению, которое вы хотите иметь в ячейке. Возможно, вы захотите отреагировать на изменение, поэтому добавьте didSet наблюдатель за имуществом.

var JSON:[String: AnyObject] = [String: AnyObject]() {
    didSet {
        print("populate your labels with your new data");
    }
}
Другие вопросы по тегам