I use parse for my app. I want to let user able to type messages that they want to send via textField and save it to that user's messages column in parse with PFRelation
via save button in view controller and the messages will be saved as an array and show it in tableView
.
The problem is I don't know how to add text in textfield to an array and save it to parse.
Any help is appreciated and let me know if you need any additional information!
UPDATE:
These are screenshots of my parse's class "User"
This is my current user's friend list inside "Friends" column
I've not yet create Messages column because when run relationForKey
code in Xcode it will automatically create for me
UPDATE 2:
This is my code:
@IBAction func addMessage(sender: AnyObject) {
var newMessage = addMessageText.text
let message = PFObject(className: "Messages")
var query = PFQuery(className: "Messages")
message["messageTextColumn"] = newMessage
message.saveInBackgroundWithBlock {
(success: Bool, error: NSError?) -> Void in
if (success) {
println("added to Message Class")
query.whereKey("messageTextColumn", equalTo: newMessage)
query.getFirstObjectInBackgroundWithBlock{(object:PFObject!, error: NSError!) -> Void in
if error == nil {
let relation = PFUser.currentUser().relationForKey("Messages")
var addMessageWithObject = object
if addMessageWithObject != nil {
relation.addObject(addMessageWithObject)
println("Added with getFirstObject")
}
else{
println("Error Added with getFirstObject")
}
}
}
} else {
println("added to Message class Error")
}
}
}
I save new message to the array first and then I save it with saveInBackgroundWithBlock.. and inside I query that message to add it to relation.
The messages that I've added appear on Messages class table but not in that user's relation but it shows log
"added to Message Class" and "Added with getFirstObject"
Which means that my code execute exactly like it should be. Probably about the method?
UPDATE 3 this is the object println
<Messages: 0x7fd4484f75f0, objectId: LFXoSaHfQl, localId: (null)> {
ACL = "<PFACL: 0x7fd4484d2e70>";
messageTextColumn = 9;
}
UPDATE 4 this is my code
@IBAction func addMessage(sender: AnyObject) {
var newMessage = addMessageText.text
let message = PFObject(className: "Messages")
var user = PFUser.currentUser()
var query = PFQuery(className: "Messages")
message["messageTextColumn"] = newMessage
message.saveInBackgroundWithBlock {
(success: Bool, error: NSError?) -> Void in
if (success) {
println("added to Message Class")
query.getFirstObjectInBackgroundWithBlock{(object:PFObject!, error: NSError!) -> Void in
if error == nil {
var addMessageWithObject = object
if addMessageWithObject != nil {
user.saveInBackground()
println("Added with getFirstObject")
}
else{
println("Error Added with getFirstObject")
}
}
}
}
}
}
user column is (undefined) as in screenshot here
and the error log can't add non pointer to relation
is back
how do I fix this? Thanks!
Here's what you do:
Message
table on Parse messages
column to your user table of type Relation
with Target Class as your Message
table. In your code, in your buttons trigger:
// Get the message text from your textField let messageText = textField.text // Create your new Message object let newMessage = PFObject(className: "Message") // ... Add your data to your new message object newMessage["messageTextColumn"] = messageText newMessage.saveInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in if (success) { // Add the new message to the user's relation let relation = yourUser.relationForKey("messagesColumnName") relation.addObject(newMessage) // Save the user object yourUser.saveInBackground() } else { // There was a problem, check error.description } }
Here's a link to Parse's Relation reference .
UPDATE:
Missing code to save your user object.
query.getFirstObjectInBackgroundWithBlock{(object:PFObject!, error: NSError!) -> Void in
if error == nil {
let relation = PFUser.currentUser().relationForKey("Messages")
var addMessageWithObject = object
if addMessageWithObject != nil {
relation.addObject(addMessageWithObject)
PFUser.currentUser().saveInBackground()
println("Added with getFirstObject")
}
else{
println("Error Added with getFirstObject")
}
}
}
UPDATE 2:
Messages without PFRelation:
user
) of type Pointer with Target Class as _User to the Messages
table to identify each message by their user. Saving new messages: Save the new message object like above (just without adding the relation and it'e related code):
@IBAction func addMessage(sender: AnyObject) { var newMessage = addMessageText.text let message = PFObject(className: "Messages") message["messageTextColumn"] = newMessage message["user"] = PFUser.currentUser() message.saveInBackgroundWithBlock {(success: Bool, error: NSError?) -> Void in if (success) { println("added to Message Class") } else { // Error saving message } } }
Querying the messages for a user: You can query using the current user as a constraint so no matter which device a particular switches to, he/she will get only his messages.
var query = PFQuery(className:"Messages") query.whereKey("user", equalTo:PFUser.currentUser()) query.findObjectsInBackgroundWithBlock { ... }
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.