UIViewController afficher ces donnée JSON

easydeasyd Membre
janvier 2017 modifié dans API UIKit #1

Bonjour tous le monde,


 


J'essais depuis quelques jours d'afficher des données récupérer en JSON.


Cette page est un détails.


 


Mon problème est que j'arrive a afficher mon json dans la console et a voir les donnée que je dois afficher. Mais je sais pas comment faire pour les afficher j'ai bien compris quant j'utilise un cell, mais là  j'ai tous essayer.


 


Voilà  mon code :



import UIKit
import SwiftyJSON
import MapKit
import CoreLocation
import SceneKit
import AlamofireImage
import Alamofire

class InfoSearchTableViewController: UIViewController {

var TabInfos = [String]()

@IBOutlet weak var ui_nom: UILabel!
@IBOutlet weak var ui_ville: UILabel!
@IBOutlet weak var map: MKMapView!
@IBOutlet weak var images: UIImageView!
@IBOutlet weak var imagesa: UIImageView!

override func viewDidLoad() {
super.viewDidLoad()

let idLabel = TabInfos[0]

print("dddd:",idLabel)

let url = "http://serveur/searchinfo.php?rechercheinfo=\(idLabel)"
print("dd:",url)

Alamofire.request(url, method: .get).validate().responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
print(json)
case .failure(let error):
print(error)
}
}

}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}

Merci de votre aide,


Réponses

  • Qu'affiche ton json reçu ? 


    print(json) ?


     


    Par exemple si tu as : 



    {
    "Error": {
    "Message": "",
    "Code": 0
    },
    "Data": "Mes données"
    }

    Pour y accéder avec SwiftyJson, tu fais simplement :



    let json = JSON(value)
    let Données = json["Data"].stringValue // Si c'est un string

    Tu as d'autres attribut, comme .int si c'est un integer, etc etc


     


    Regarde la doc de SwiftyJson, elle est bien foutue :)


    https://github.com/SwiftyJSON/SwiftyJSON#subscript


  • LarmeLarme Membre
    janvier 2017 modifié #3


    Mon problème est que j'arrive a afficher mon json dans la console et a voir les donnée que je dois afficher. Mais je sais pas comment faire pour les afficher j'ai bien compris quant j'utilise un cell, mais là  j'ai tous essayer.




     


    Sans plus d'explications sur quoi tu bloques exactement, la réponse est à  mon avis trop grande. C'est clairement le genre de question auxquelles je n'ai pas du tout envie de répondre tant que tu n'auras pas donné plus d'infos sur quoi tu bloques exactement.


     


    Est-ce que c'est parce que la récupération du JSON est asynchrone ? Clairement, y'a pas de reloadData d'appelé.


    Est-ce que c'est parce que tu ne sais pas parser le JSON ? Tu n'as pas compris comment est formé un JSON et comment ça doit par conséquent se parser ? Parce que c'est relativement simple une fois qu'on a compris le truc. Mais dans ce cas là , nous le donner pourrais être utile quand même, car on ne va pas inventer le parsing.


    Les afficher dans une cell, une UITableViewCell ? Tu as réussi à  parser le JSON, mais c'est la construction du dataSource et que mettre dans le tableView:cellForRowAtIndexPath: ?

    Apparemment, c'est une page de détails, donc c'est comment y aller depuis la sélection de ta cell ? Passage du tableView:didSelectItemAtIndexPath: puis un passage de données à  ton prochain UIViewController via segue ?


  • easydeasyd Membre
    janvier 2017 modifié #4

    je comprend ce que tu veux dire mais nom je fait passer un ID avec quoi je l'utiliser dans mon URL


    let url = "http://serveur/searchinfo.php?rechercheinfo=\(idLabel)"


     


    Après j'affiche que l'ID_produit que je veux, je ne fait pas de cell.


     


    Mais quant je veux afficher le détail il son vide voilà  la suite de mon code.


     


    Pour parser un JSON pas de problème a ce niveau, je ne pense pas 



    import UIKit
    import SwiftyJSON
    import MapKit
    import CoreLocation
    import SceneKit
    import AlamofireImage
    import Alamofire

    class InfoSearchTableViewController: UIViewController {

    var TabInfos = [String]()

    @IBOutlet weak var ui_nom: UILabel!
    @IBOutlet weak var ui_ville: UILabel!
    @IBOutlet weak var map: MKMapView!
    @IBOutlet weak var images: UIImageView!
    @IBOutlet weak var imagesa: UIImageView!

    override func viewDidLoad() {
    super.viewDidLoad()

    let idLabel = TabInfos[0]
    print("dddd:",idLabel)

    let url = "http://serveur/searchinfo.php?rechercheinfo=\(idLabel)"
    print("dd:",url)

    Alamofire.request(url, method: .get).validate().responseJSON { response in
    switch response.result {
    case .success(let value):
    let json = JSON(value)
    //print(json)

    self.ui_nom.text = json["nom"].stringValue
    self.ui_ville.text = json["ville"].stringValue


    self.map.mapType = MKMapType.standard

    let longitudeString = json[["Longitude"]].stringValue
    //print("longitude: \(longitudeString)")

    let latitudeString = json["Latitude"].stringValue
    //print("latitude: \(latitudeString)")

    let doubleLat = Double(latitudeString)
    let doubleLon = Double(longitudeString)

    print("doublelat: \(doubleLat)")
    print("doubleLon: \(doubleLon)")

    if doubleLat == nil && doubleLon == nil {
    print ("0")
    }else{
    let location:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: (doubleLat)!, longitude: (doubleLon)!)

    let span = MKCoordinateSpanMake(0.01, 0.01)
    let region = MKCoordinateRegion(center: location, span: span)
    self.map.setRegion(region, animated: true)

    let annotation = MKPointAnnotation()
    annotation.coordinate = location
    annotation.title = json["nom"].stringValue
    annotation.subtitle = json["adresse"].stringValue
    self.map.addAnnotation(annotation)

    }

    case .failure(let error):
    print(error)
    }
    }

    }

    override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(true)
    }

    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    }
    }

    Merci a vous,


  • Comment ça ils sont vide ? Qu'est-ce qui est vide ?


     


    Tu ne nous dit pas ce qu'affiche ton print(json)


     


    Tu es sûr que ton serveur renvoie bien les infos dedans ?


  • easydeasyd Membre
    janvier 2017 modifié #6

    désolé voilà  ce que cela m'affiche 


     


    dddd: 2027


     


    dd: http://serveur/searchinfo.php?rechercheinfo=2027



    [
    {
    "Longitude" : "",
    "pays" : "FRANCE",
    "ville" : "PARIS",
    "logo" : "http:\/\/serveur\/20.jpg",
    "codepostal" : "06000",
    "nom" : "TOTO",
    "Latitude_agence" : "",
    "id" : "2027"
    }
    ]

    puis après les modification voilà  ce que cela me donne :



    ui_ville <UILabel: 0x7fd677f3f330; frame = (144 393; 30 20.3333); text = '';
    opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer =
    <_UILabelLayer: 0x618000282210>>

  • Tu devrais faire une copie d'écran de l'affichage du print(json) et nous la montrer.


     


    En cliquant sur le bouton "Plus d'options de réponse" d'un post, tu peux accéder à  des fonctions supplémentaire permettant d'intégrer une image avec le texte.


     


     


  • LarmeLarme Membre
    janvier 2017 modifié #8

    self.ui_nom.text = json["nom"].stringValue

    C'est vide ça ?


    Parce que vu que le JSON que tu as montré semble grandement être un (NS)Array et pas un (NS)Dictionary at top level, ne connaissant pas SwiftyJSON, mais j'aurais tendance à  dire qu'il faudrait faire plutôt :



    self.ui_nom.text = json[0]["nom"].stringValue
  • Super ca fonctionne merci de votre aide  o:)   o:)   o:)   o:)

  • C'est le fait de remplacer json["someKey"] avec json[0]["someKey"] qui a corrigé ton problème ?


Connectez-vous ou Inscrivez-vous pour répondre.