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

时间:2015-07-06 07:01:45

标签: xcode swift uitableview parse-platform

这是我的代码,用于保存数据以解析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
        }
    }
}

这就是我在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()
    }

}

问题是当我尝试打开没有互联网连接的消息tableview单元时,我保存的消息根本没有出现在消息tableview单元格中,似乎它也没有将数据保存到解析本地数据存储区中。

感谢任何帮助。
谢谢!

1 个答案:

答案 0 :(得分:0)

您的addMessage方法永远不会将对象保存到本地数据存储区,只会将其保存到服务器,您还应该调用pinInBackground以将对象实际存储在本地数据存储区中,它在Local Datastore documentation中描述。

  

您可以通过固定PFObject将PFObject存储在本地数据存储中。钢钉   PFObject是递归的,就像保存一样,所以任何对象都是   你固定的那个人所指向的也会固定。