swiftparse-platformreachabilitylocal-datastorepfquerytableviewcontrolle

Swift - Parse PFQueryTableViewController Error on loading the LocalDataStore


Good day! I'm using Parse in my swift project, Now my problem is loading and saving the query or objects to the localDataStore, I tried this method

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell {

        var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as CustomPFTableViewCell!
        if cell == nil {
            cell = CustomPFTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")
        }


        // Extract values from the PFObject to display in the table cell
        if let placeName = object?["placeName"] as? String {
            cell.cellName.text = placeName
        }
        if let station = object?["station"] as? String {
            cell.cellDetail.text = station
        }
        if let placeImg = object?["placeImg"] as? String {


            let decodedData = NSData(base64EncodedString: placeImg, options: NSDataBase64DecodingOptions(rawValue: 0))
           // var decodedimage = UIImage(data: decodedData!)
            var finImage = UIImage(data: decodedData!)
            cell.cellBgImg.image = finImage



        }

        PFObject.pinAllInBackground(self.objects, block: { (succeeded, error) -> Void in

            if (error == nil) {
            }else {
                println(error!.userInfo)
            }
        })



        return cell
    }

now in my queryForTable method i have this

override func queryForTable() -> PFQuery {

        // Start the query object
        var query = PFQuery(className: "Places")

        // Add a where clause if there is a search criteria
        if searchBar.text != "" {
            query.whereKey("filterKeyword", containsString: searchBar.text.lowercaseString)
        }

        // Order the results
        query.orderByAscending("placeName")

        var cReturn = PFQuery()

        if (IJReachability.isConnectedToNetwork()) {

            cReturn = query

        } else {

            cReturn = query.fromLocalDatastore()

        }

        return cReturn
    }

As you can see, I'm using Reachability to check if the device is connected to the internet. If not, The query will return query.fromLocalDataStore and if the device is connected it will return the normal query to get the latest data.

Now, my problem is when I'm turning off the internet to test it, it gives me an error 'Method requires Pinning enabled.' which i already did in tableView method

PFObject.pinAllInBackground(self.objects, block: { (succeeded, error) -> Void in

            if (error == nil) {
            }else {
                println(error!.userInfo)
            }
        })

What do you think I did wrong? Thanks!


Solution

  • I think you should put the method where you pin the objects inside your objectsDidLoad() method and not in your cellForRowAtindexPath() method.