Harsha87
Harsha87

Reputation: 111

Delay in displaying data on tableView in ios swift

Hi,

I'm trying to parse data on to the listview and am able to get it and display it on the tableView but the problem is it is taking hell lot of time to display it on the tableview. Please find the my code below.

func jsonParsing()
    {
        activityIndicatorView.startAnimating()

        let session = NSURLSession.sharedSession()
        let request = NSMutableURLRequest (URL: deviceListURL)
        request.HTTPMethod = "GET"

        let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in

            if error != nil {
                // If there is an error in the web request, print it to the console
                println(error.localizedDescription)
            }

            var err: NSError?
            if(data != nil) {
                var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as! NSMutableArray

                //println("Data: \(jsonResult)")

                var dataDict: NSDictionary
                for dataDict : AnyObject in jsonResult {
                    var device_id: NSString = dataDict.objectForKey("deviceId") as! NSString
                    var device_name: NSString = dataDict.objectForKey("deviceName") as! NSString
                    var device_status: NSInteger = dataDict.objectForKey("status") as! NSInteger

                    let dictionary = [self.deviceID: device_id, self.deviceName: device_name, self.Status: device_status]
                    self.myObject.addObject(dictionary)
                }

                println("My object = %@", self.myObject)
                println(self.myObject.count)

                if self.myObject.count != 0 {
                    self.reloadTable()

                }
            }

            if err != nil {
                // If there is an error parsing JSON, print it to the console
                println("JSON Error \(err!.localizedDescription)")
            }


        })

        task.resume()

    }

Upvotes: 0

Views: 822

Answers (1)

Thomas Müller
Thomas Müller

Reputation: 15625

The completion handler is running in a background queue, not the main thread. UI updates have to happen on the main thread, though.

Try calling reloadTable() on the main thread:

dispatch_sync(dispatch_get_main_queue(), {
    self.reloadTable()
})

(I just typed this in here untested, so I hope it works this way)

Upvotes: 3

Related Questions