这是我的代码,用于保存数据以解析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单元格中,似乎它也没有将数据保存到解析本地数据存储区中。
感谢任何帮助。
谢谢!
答案 0 :(得分:0)
您的addMessage
方法永远不会将对象保存到本地数据存储区,只会将其保存到服务器,您还应该调用pinInBackground
以将对象实际存储在本地数据存储区中,它在Local Datastore documentation中描述。
您可以通过固定PFObject将PFObject存储在本地数据存储中。钢钉 PFObject是递归的,就像保存一样,所以任何对象都是 你固定的那个人所指向的也会固定。