使用 sub 类 时如何更新解析记录
How to update parse records when using sub classes
我有一个 parse.com 后端。我有一个 Message class,它是 PFObject 的子class。我将来自数据库的消息存储在数组 messages = Message.
中
当我需要更新记录时遇到了麻烦,因为我得到了重复项。
我一直在尝试做的是从消息数组中获取一条消息,然后调用 saveInBackgroundWithBlock...认为后端会知道它引用了数据库中的现有行。
我也刚遇到 fetchIfNeeded。
我的代码如下。我哪里错了?我应该如何更新存储在本地消息数组中的现有记录。如果有的话,我应该如何在我的场景中使用 fetchIfNeeded?或者我应该以某种方式使用核心数据/本地存储? (困惑)
class Message : PFObject, PFSubclassing {
var messageTitle : NSString
var imageFile: PFFile
}
func getMessages() {}
var currentMessages = [Message]()
var messageQuery = Message.query()
messageQuery.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in
for object in objects {
var message = Message()
message.messageTitle = object["messageTitle"] as String
message.imageFile = object["imageFile"] as PFFile
self.currentMessages.append(message)
}
}
func updateMessage() {
message.messageTitle = self.messageTitle.text
let imageData = UIImagePNGRepresentation(self.imageToPost.image)
let imageFile = PFFile(name: "image.png", data: imageData)
message.imageFile = imageFile
message.saveInBackgroundWithBlock({ (success: Bool!, error: NSError!) -> Void in
if success == false {
self.displayAlert("Something went wrong", error: "Please try again later")
} else {
self.navigationController?.popViewControllerAnimated(true)
}
})
}
func saveNewMessage() {
message = Message()
message.messageTitle = messageTitle.text
let imageData = UIImagePNGRepresentation(self.imageToPost.image)
let imageFile = PFFile(name: "image.png", data: imageData)
message.imageFile = imageFile
message.saveInBackgroundWithBlock({ (success: Bool!, error: NSError!) -> Void in
if success == false {
self.displayAlert("Something went wrong", error: "Please try again later")
} else {
self.navigationController?.popViewControllerAnimated(true)
}
})
}
您看到此错误的原因是您在完成块中创建了新的 Message
对象,而不是使用查询返回的对象。
func getMessages() {
var currentMessages = [Message]()
var messageQuery = Message.query()
messageQuery.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in
for object in objects {
// This is now creating a new, unsaved "Message" object
var message = Message()
message.messageTitle = object["messageTitle"] as String
message.imageFile = object["imageFile"] as PFFile
self.currentMessages.append(message)
// This might be a much easier way to do what you want:
self.currentMessages = objects
}
}
}
我有一个 parse.com 后端。我有一个 Message class,它是 PFObject 的子class。我将来自数据库的消息存储在数组 messages = Message.
中当我需要更新记录时遇到了麻烦,因为我得到了重复项。
我一直在尝试做的是从消息数组中获取一条消息,然后调用 saveInBackgroundWithBlock...认为后端会知道它引用了数据库中的现有行。
我也刚遇到 fetchIfNeeded。
我的代码如下。我哪里错了?我应该如何更新存储在本地消息数组中的现有记录。如果有的话,我应该如何在我的场景中使用 fetchIfNeeded?或者我应该以某种方式使用核心数据/本地存储? (困惑)
class Message : PFObject, PFSubclassing {
var messageTitle : NSString
var imageFile: PFFile
}
func getMessages() {}
var currentMessages = [Message]()
var messageQuery = Message.query()
messageQuery.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in
for object in objects {
var message = Message()
message.messageTitle = object["messageTitle"] as String
message.imageFile = object["imageFile"] as PFFile
self.currentMessages.append(message)
}
}
func updateMessage() {
message.messageTitle = self.messageTitle.text
let imageData = UIImagePNGRepresentation(self.imageToPost.image)
let imageFile = PFFile(name: "image.png", data: imageData)
message.imageFile = imageFile
message.saveInBackgroundWithBlock({ (success: Bool!, error: NSError!) -> Void in
if success == false {
self.displayAlert("Something went wrong", error: "Please try again later")
} else {
self.navigationController?.popViewControllerAnimated(true)
}
})
}
func saveNewMessage() {
message = Message()
message.messageTitle = messageTitle.text
let imageData = UIImagePNGRepresentation(self.imageToPost.image)
let imageFile = PFFile(name: "image.png", data: imageData)
message.imageFile = imageFile
message.saveInBackgroundWithBlock({ (success: Bool!, error: NSError!) -> Void in
if success == false {
self.displayAlert("Something went wrong", error: "Please try again later")
} else {
self.navigationController?.popViewControllerAnimated(true)
}
})
}
您看到此错误的原因是您在完成块中创建了新的 Message
对象,而不是使用查询返回的对象。
func getMessages() {
var currentMessages = [Message]()
var messageQuery = Message.query()
messageQuery.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in
for object in objects {
// This is now creating a new, unsaved "Message" object
var message = Message()
message.messageTitle = object["messageTitle"] as String
message.imageFile = object["imageFile"] as PFFile
self.currentMessages.append(message)
// This might be a much easier way to do what you want:
self.currentMessages = objects
}
}
}