简体   繁体   English

无法使用解析本地数据存储来保存和查询数据

[英]Cannot save and query data with parse local datastore

This is my code to save data to parse localDatastore in swift 这是我的代码,用于保存数据以快速解析localDatastore

@IBAction func addMessage(sender: AnyObject) {

    var newMessage = addMessageText.text

    let message = PFObject(className: "Messages")
    var user = PFUser.currentUser()
    message["messageTextColumn"] = newMessage
    message["user"] = user!.objectId


    message.saveInBackgroundWithBlock {(success: Bool, error: NSError?) -> Void in
        if (success) {
            println("added to Message Class")
           println(user)
            message.saveInBackground()


        } else {
            // Error saving message
        }
    }
}

and this is how I query for that data in messagesListController Class 这就是我如何在messagesListController类中查询该数据

 @IBOutlet var messageTableView: UITableView!
var messageArray:[String] = ["Lope"]
override func viewDidLoad() {
    super.viewDidLoad()
    retrieveMessagesLocally()
    retrieveMessages()
    }
func retrieveMessagesLocally(){ // function that query the message data from parse local datastore
    let query = PFQuery(className: "Messages")
    query.fromLocalDatastore()
    var currentUser = PFUser.currentUser()
    query.whereKey("user", equalTo: currentUser!.objectId!)
    query.findObjectsInBackground().continueWithBlock {
        (task) -> AnyObject in
        if let error = task.error {
            println("Error: \(error)")
            return task
        }

        println("Retrieved \(task.result.count)")
        return task
    }
}
func retrieveMessages() {
    var query = PFQuery(className:"Messages")
    var user = PFUser.currentUser()
    query.whereKey("user", equalTo:user!.objectId!)
    query.findObjectsInBackgroundWithBlock { [weak self]
        (objects:[AnyObject]?, error:NSError?) -> Void in
        println(objects)
        println("succeed")
        let messages = objects
        for object in objects!{
            if let message = object["messageTextColumn"] as? String {
                println(object)
                self?.messageArray.append(message)

            }

        }

         self?.tableView.reloadData()
    }

}

The problem is when I try to open message tableview cell without internet connection the message that I saved didn't appear in message tableview cell at all and it seems that it didn't save the data into the parse local datastore as well. 问题是当我尝试在没有Internet连接的情况下打开消息表视图单元格时,我保存的消息根本没有出现在消息表视图单元格中,而且似乎也没有将数据保存到解析本地数据存储中。

Any help is appreciated. 任何帮助表示赞赏。
Thanks! 谢谢!

Your addMessage method never saves the object to the local datastore, it only saves it to the server, you should call pinInBackground as well to actually store the object(s) in the local datastore, it is described in the Local Datastore documentation . 您的addMessage方法永远不会将对象保存到本地数据存储中,而只会将其保存到服务器,您还应该调用pinInBackground来将对象实际存储在本地数据存储中,这在“ 本地数据存储”文档中有描述。

You can store a PFObject in the local datastore by pinning it. 您可以通过固定PFObject将其存储在本地数据存储中。 Pinning a PFObject is recursive, just like saving, so any objects that are pointed to by the one you are pinning will also be pinned. 像保存一样,固定PFObject是递归的,因此,您要固定的对象所指向的任何对象也将被固定。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM