2016-06-15 17 views
2

Ich habe 5 Klassen erstellt, die ProfileHomeModel, ProfileLocationModel, ProfileRequestManager, ProfileTableUserViewController und ProfileTableViewCell enthält. Mein Ziel ist es, Json korrekt zu parsen und die Daten anzuzeigen. Ich bin auf ein Problem in meiner Anfrage-Manager-Klasse gestoßen. Ich bin neu zu schnell. Ich möchte dies tun, ohne swiftyJSON und Alamofire zu verwenden.So erstellen Sie RequestManager-Klasse ohne Verwendung von Frameworks Swift

import Foundation 
class ProfileRequestManager{ 


    let urlPath = "*********" 

    let url = NSURL(string: urlPath) 
    let data = NSData(contentsOfURL: url!) 

    do { 
     let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as? NSDictionary 

     print(jsonData) 
     let results = jsonData!.objectForKey("strengths") as? [NSDictionary] ?? [] 

    for result in results { 
     print(result) 
    } 


    } 
    catch { 
     print("Something went wrong while parsing json data fetched from the API") 
    } 


} 

jsonData

{ "success": true, "profile": { "firstname": "Vignesh", "lastname": "Krish", "title": "Software Developer Intern", "designations": null, "specialty": "Computer Science", "location": "0", "email": "[email protected]", "phone": "4026136265", "biography": "Boxing and Travelling", "interests": "Watching movies", "skills": "Hozier and A.R Rahman", "goals": "becoming a software developer", "mentors": "Hardik Patel", "doh": "2016-05-09", "dob": "1994-06-08", "strengths": [ { "id": "4", "name": "Analytical", "description": "People exceptionally talented in the Analytical theme search for reasons and causes. They have the ability to think about all the factors that might affect a situation.", "color": "9c0000" }, { "id": "17", "name": "Focus", "description": "People exceptionally talented in the Focus theme can take a direction, follow through, and make the corrections necessary to stay on track. They prioritize, then act.", "color": "5c3a6e" }, { "id": "8", "name": "Communication", "description": "People exceptionally talented in the Communication theme generally find it easy to put their thoughts into words. They are good conversationalists and presenters.", "color": "da892f" }, { "id": "29", "name": "Responsibility", "description": "People exceptionally talented in the Responsibility theme take psychological ownership of what they say they will do. They are committed to stable values such as honesty and loyalty.", "color": "5c3a6e" }, { "id": "30", "name": "Restorative", "description": "People exceptionally talented in the Restorative theme are adept at dealing with problems. They are good at figuring out what is wrong and resolving it.", "color": "5c3a6e" } ], "settings": { "enable_sms": "0" } } }

Ich versuche, über

alles davon zurückzukehren der Fehler Ich bin auf der fangen bekommen. Xcode gibt mir einen erwarteten Deklarationsfehler. Ich habe meine geschweiften Klammern überprüft.

Ich würde einige Hilfe schätzen, um dies herauszufinden.

Auch ich brauche keine URL für Sicherheitszwecke. Ich hoffe, es hilft.

Ich versuche auch, alle Werte in separaten Zellen anzuzeigen. Das habe ich jetzt.

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


    if indexPath.row == 0 { 

     let cell = tableView.dequeueReusableCellWithIdentifier("ProfileCell", forIndexPath: indexPath) as! ProfileUserTableViewCell 
     cell.firstName?.text = firstName 
     cell.lastName?.text = lastName 
     cell.title?.text = title 

     return cell 

} 
} 

Wissen Sie, wie ich das beheben kann?

Dies ist meine aktuelle Situation. Ich kann es nicht in Tabellenansichtszellen anzeigen lassen. Das Problem scheint damit zu sein, wie ich meine json-Werte den Etiketten zuweise.

Import UIKit

Klasse ProfileUserTableViewController: UITableViewController {

override func viewDidLoad() { 
    super.viewDidLoad() 
    tableView.reloadData() 
    //retrieving json from server 

    let requestURL: NSURL = NSURL(string: "https:******************")! 

    //Your baseURL 
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL) 
    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithRequest(urlRequest) { 
     (data, response, error) -> Void in 

     let httpResponse = response as! NSHTTPURLResponse 
     let statusCode = httpResponse.statusCode 

     if (statusCode == 200) { 
      print("Everyone is fine") 

      do { 
       let JSON = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions(rawValue: 0)) 
       guard let JSONDictionary :NSDictionary = JSON as? NSDictionary else { 
        print("Not a Dictionary") 

        return 
       } 
       // print("JSONDictionary! \(JSONDictionary)") 

       if let profile = JSONDictionary["profile"] as? NSDictionary { 
        print(profile) 
        //This is where we should begin parsing json into whatever you want to 
        let firstName = profile["firstName"] as? String 
        let lastName = profile["lastName"] as? String 
        let title = profile["title"] as? String 

        print(firstName!, lastName, title!) 

        //      let settings = profile["settings"] as? NSDictionary 
        // 
        //      let enableSMS = settings!.valueForKey("enable_sms") as? String 
        //      print(enableSMS!) 

        //to parse commentTotals content from api 
        let commentTotals = profile["commentTotals"] as? NSArray 
        for eachItem in commentTotals! { 
         let total = eachItem.valueForKey("total") as? String 
         let id = eachItem.valueForKey("id") as? String 
         print(total!,id!) 

        } 

        //to parse strength contents from api 
        let strengths = profile["strengths"] as? NSArray 
        for eachItem in strengths! { 
         let color = eachItem.valueForKey("color") as? String 
         let description = eachItem.valueForKey("description") 
         let id = eachItem.valueForKey("id") 
         let name = eachItem.valueForKey("name") 
         print(name!, description!, color!, id!) 
        } 
       } 
      } 
      catch let JSONError as NSError { 
       print("\(JSONError)") 
      } 
     } 
    } 

    task.resume() 


    // Uncomment the following line to preserve selection between presentations 
    // self.clearsSelectionOnViewWillAppear = false 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem() 
} 

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

// MARK: - Table view data source 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // #warning Incomplete implementation, return the number of sections 
    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of rows 
    return 4 
} 

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

    if indexPath.row == 0 { 

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

     cell.firstName?.text = [indexPath.row].firstName 
     cell.lastName?.text = [indexPath.row].lastName 
     cell.title?.text = [indexPath.row].title 



     return cell 

    } 

    if indexPath.row == 1 { 

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

     cell.score?.text = [indexPath.row].score 
     cell.received?.text = [indexPath.row].received 
     cell.given?.text = [indexPath.row].given 
     return cell 

    } 
    if indexPath.row == 2 { 

     let cell = tableView.dequeueReusableCellWithIdentifier("ProfileCell3", forIndexPath: indexPath) as! ProfileUserTableViewCell 
     cell.coreValueComments1?.text = [indexPath.row].total 
     cell.coreValueComments2?.text = [indexPath.row].total 
     cell.coreValueComments3?.text = [indexPath.row].total 
     cell.coreValueComments4?.text = [indexPath.row].total 


     return cell 

    } 

    else { 

     let cell = tableView.dequeueReusableCellWithIdentifier("ProfileCell4", forIndexPath: indexPath) as! ProfileUserTableViewCell 
     cell.strength1?.text = [indexPath.row].name 
     cell.strength2?.text = [indexPath.row].name 
     cell.strength3?.text = [indexPath.row].name 
     cell.strength4?.text = [indexPath.row].name 



     return cell 

    } 

} 



} 

Antwort

1

Hier ist ein kleiner Versuch von dem, was Sie tun können, Ihre Json serialisiert werden. Ich habe den folgenden Code in einem viewDidLoad() Block implementiert, um JSON-Daten in der xcode-Konsole erfolgreich zu drucken.

let requestURL: NSURL = NSURL(string: "https://*******************")! 
    //Your baseURL 
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL) 
    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithRequest(urlRequest) { 
     (data, response, error) -> Void in 

     let httpResponse = response as! NSHTTPURLResponse 
     let statusCode = httpResponse.statusCode 

     if (statusCode == 200) { 
      print("Everyone is fine") 

      do { 
       let JSON = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions(rawValue: 0)) 
       guard let JSONDictionary :NSDictionary = JSON as? NSDictionary else { 
        print("Not a Dictionary") 

        return 
       } 
       // print("JSONDictionary! \(JSONDictionary)") 

       if let profile = JSONDictionary["profile"] as? NSDictionary { 
        print(profile) 


        //This is where we should begin parsing json into whatever you want to 

      let biography = profile["biography"] as? String 
        let designations = profile["designations"] as? String 
        let dob = profile["dob"] as? String 
        let doh = profile["doh"] as? String 
        let email = profile["email"] as? String 
        // do the same for firstname, goals, interests, lastname, location, mentors, phone, skills, speciality 

        print(biography!, designations, dob!) 

        let settings = profile["settings"] as? NSDictionary 

         let enableSMS = settings!.valueForKey("enable_sms") as? String 
         print(enableSMS!) 

        let strengths = profile["strengths"] as? NSArray 
        for eachItem in strengths! { 
         let color = eachItem.valueForKey("color") as? String 
         let description = eachItem.valueForKey("description") 
         let id = eachItem.valueForKey("id") 
         let name = eachItem.valueForKey("name") 
         print(name!, description!, color!, id!) 
        } 




       } 
      } 
      catch let JSONError as NSError { 
       print("\(JSONError)") 
      } 



     } 
    } 

    task.resume() 

Ich hoffe, das hilft Ihnen. Spielen Sie mit Arrays und Wörterbüchern herum, und Sie können alle Werte aus Ihrer API abrufen.

+0

vielen dank bro !! Ich habe jedoch eine andere Frage. Ich versuche, die JSON-Werte auf meinem ui anzuzeigen. Ich habe den Code und die Frage an den Hauptpost angehängt. Könntest du mir bitte helfen? –

+0

Wie möchten Sie die Daten in Ihrer Benutzeroberfläche anzeigen? Tabellenansicht ? – amagain

+0

Darüber hinaus ist dies nicht der genaue Ansatz, den Sie Codes schreiben. Dieser Code dient nur dem Zweck, etwas zu tun. Bitte studieren Sie das Designmuster und versuchen Sie, dem MVC-Muster zu folgen, da dies über alle Bereiche hinweg verfolgt wird. – amagain