2016-04-22 5 views
0

Ich habe 3 Etiketten in einer benutzerdefinierten UITableview-Zelle und ich versuche, JSON-Daten, die ich von einer API mit Alamofire bekommen habe, zu übergeben, aber ich habe Mühe zu verstehen, wie man die zurückgegebene JSON in die Tabellenansicht schieben kann. Jede Hilfe würde sehr geschätzt werden. -Code unten:Wie schiebe ich Json-Daten zu Etiketten in einem UITableView?

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 
} 


} 

Retour json wie folgt aus:

{ 
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"; 
    } 
); 

} Ich versuche, die "gespielt" nur zu drücken, "Punkte" und "Team/_text" Ergebnisse aus zu jedem der Etiketten.

Antwort

1

Da die Frage ist sehr breit und ist nicht festgelegt, was genau das Problem hier ist, die allgemeinen Schritte sind:

1) Karte Ihr json zu Wörterbuch/NSDictionary. Angenommen, die JSON-Snippet Sie auf dem Laufenden ist ein Stück JSONArray im Format folgenden [{}], alles, was Sie tun müssen, ist:

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

wo yourData variable Daten von Netzwerk zu NSData Format gegossen heruntergeladen

2) erstellen Stellen zu diesen drei Etiketten in Ihrer benutzerdefinierten tableViewCell

3) für jede Zelle, diese Etiketten innerhalb

gesetzt

func Tableview (Tableview: UITableView, cellForRowAtIndexPath inde xPath: NSIndexPath)

Verfahren wie folgt:

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) Ich nehme an, Sie mehr Zellen benötigt, als nur eine, dann speichern viele Wörterbücher in Array und Zugriff auf jedes Element wie folgt aus:

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

zu Hause Nicht jetzt, werde ich in einer Stunde zurück – DCDC

+0

@ShaneN meine bearbeiten sehen – DCDC

+0

Denken wird es, probieren Sie es aus – DCDC

0

Sie müssen eine Unterklasse von UITableViewCell erstellen, z. B. MyTableViewCell, und eine Eigenschaft mit dem Namen JSON hinzufügen.

Da Sie wahrscheinlich mit Interface Builder Ihre Zelle und die Wiederverwendungskennung ("Cell") definieren, legen Sie die Klasse dieser Zelle auf MyTableViewCell fest und verbinden Sie die Labels mit einigen IBOutlets in Ihrer neu definierten Klasse.

Wenn Sie dann 'dequeueReusableCellWithIdentifier' aufrufen, wandeln Sie die Zelle in MyTableViewCell um und legen Sie die Eigenschaft JSON auf den Wert fest, den Sie in der Zelle haben möchten. Sie werden wahrscheinlich auf die Änderung reagieren wollen, fügen Sie also die didSet Property Observer hinzu.

var JSON:[String: AnyObject] = [String: AnyObject]() { 
    didSet { 
     print("populate your labels with your new data"); 
    } 
} 
+0

Überprüfen Sie diese Antwort: http://StackOverflow.com/A/24013852/1728118 –

0

Zunächst sollten Sie ein Modell erstellen, das 3 Objekte enthalten, die Sie speichern möchten, wie:

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 
    } 
} 

In Ihrem LeagueTableController, erstellen Sie ein Array mit den Daten zu halten und teilen Sie Ihre Tableview:

var data = [Data]() 

Config die Tableview die Daten zeigen:

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 
} 
Schließlich

, analysieren Ihre Antwort json in unseren Datenarray anzuzeigen auf 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() 
     } 
    } 
} 

Hope this Hilfe!

+0

Können Sie Ihre Antwort JSON hier posten? – maphongba008

+0

Ich habe die Antwort aktualisiert! – maphongba008