swift - 应用程序未保存有关输入栏错误“预期字符串但得到指针”的已发布评论, 代码=111})"
问题描述
在消息输入栏上发表的评论未保存以进行解析。我收到错误消息:
Comments.post 的架构不匹配;预期字符串但得到指针" UserInfo={error=Comments.post 的模式不匹配;预期字符串但得到指针,NSLocalizedDescription=Comments.post 的模式不匹配;预期字符串但得到指针,代码 = 111})
在下面发布的代码中,在方法下:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
有几个注释掉的函数,当在应用程序中运行时,当用户单击评论、用户名或图像时,会保存一个名为 random comment1 的评论。
在方法下使用相同功能稍作改动后:
func messageInputBar(_ inputBar: MessageInputBar, didPressSendButtonWith text: String) {
在我将评论发布到消息输入栏后,它不允许我保存任何评论,导致出现上述错误。
let commentBar = MessageInputBar()
var showsCommentBar = false
var posts = [PFObject]()
var selectedPost: PFObject!
override func viewDidLoad() {
super.viewDidLoad()
commentBar.inputTextView.placeholder = "Add a comment....."
commentBar.sendButton.title = "Post"
commentBar.delegate = self
tableView.delegate = self
tableView.dataSource = self
tableView.keyboardDismissMode = .interactive //dismisses keyboard
// Do any additional setup after loading the view.
let center = NotificationCenter.default
center.addObserver(self, selector: #selector(keyboardWillbeHidden(note:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc func keyboardWillbeHidden(note: Notification){
commentBar.inputTextView.text = nil
showsCommentBar = false
becomeFirstResponder()
}
override var inputAccessoryView: UIView{
return commentBar
}
override var canBecomeFirstResponder: Bool{
return showsCommentBar
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let query = PFQuery(className: "Posts")
query.includeKeys(["author", "comments", "comments.author"])
query.limit = 20
query.findObjectsInBackground{ (posts, error) in
if posts != nil{
self.posts = posts!
self.tableView.reloadData()
}
}
}
func messageInputBar(_ inputBar: MessageInputBar, didPressSendButtonWith text: String) {
//create comment
let comment = PFObject(className: "Comments")
//let comment = comments[indexPath.row]
comment["text"] = text
comment["post"] = selectedPost
comment["author"] = PFUser.current()!
selectedPost.add(comment, forKey: "comments")
selectedPost.saveInBackground{(success, error) in
if success{
print("comment saved!")
}else{
print("Error12: \(String(describing: error))")
}
}
tableView.reloadData()
//clear and dismiss bar
commentBar.inputTextView.text = nil
showsCommentBar = false
becomeFirstResponder()
commentBar.inputTextView.resignFirstResponder()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let post = posts[section]
let comments = (post["comments"] as? [PFObject]) ?? []
return comments.count + 2
}
func numberOfSections(in tableView: UITableView) -> Int {
return posts.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let post = posts[indexPath.section]
let comments = (post["comments"] as? [PFObject]) ?? []
if indexPath.row == 0{
let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell") as! PostCell
let user = post["author"] as! PFUser
cell.usernameLabel.text = user.username
cell.captionLabel.text = post["caption"] as! String
let imageFile = post["image"] as! PFFileObject
let urlString = imageFile.url
let url = URL(string: urlString!)!
cell.photoView.af_setImage(withURL: url)
return cell
}else if indexPath.row <= comments.count{
let cell = tableView.dequeueReusableCell(withIdentifier: "CommentCell") as! CommentCell
let comment = comments[indexPath.row - 1]
cell.commentLabel.text = comment["text"] as? String
let user = comment ["author"] as! PFUser
cell.nameLabel.text = user.username
return cell
}else{
let cell = tableView.dequeueReusableCell(withIdentifier: "AddCommentCell")!
return cell;
}
}
//creates new columns
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// let post = posts[indexPath.row]
let post = posts[indexPath.section]
//let comment = PFObject(className: "Comments")
let comments = (post["comments"] as? [PFObject]) ?? []
//let comment = comments[indexPath.row]
if indexPath.row == comments.count + 1{
showsCommentBar = true
becomeFirstResponder()
commentBar.inputTextView.becomeFirstResponder()
selectedPost = post
}
/*comment["text"] = "random comment1"
comment["post"] = "post"
comment["author"] = PFUser.current()
post.add(comment, forKey: "comments")
post.saveInBackground{(success, error) in
if success{
print("comment saved!")
}else{
print("error saving comments")
}
}
*/
}
}
预期的结果是评论应该在消息输入栏上发布后成功保存,并且还保存到解析仪表板,因此当您退出并重新运行应用程序时,发布的评论应该仍然存在。
解决方案
推荐阅读
- php - 通过改变函数eregi_replace来调整代码
- ios - 我想删除 tableview 上的一行,但收到错误消息?
- javascript - ReactJs 不会从 POS 打印机创建收据
- java - 试图了解如何使用 ucanaccess/JDBC 验证用户/密码
- java - Android X:tools:replace 在 line:for 属性中指定,但没有指定新值
- java - 输入整数到char数组 - Java
- c++ - DirectX 窗口媒体键没有响应
- android - onGetSentenceSuggestions 建议始终为空
- python - 在 python 的函数中使用 Iterable 和 numeric 作为输入
- python - 当多边形变得太小时时,带有 polycollection 的绘图会消失