приложение не сохраняет опубликованные комментарии на панели ввода: ошибка "ожидалась строка, но получен указатель <Posts>, код = 111})" - PullRequest
0 голосов
/ 25 апреля 2019

Оставленный комментарий на панели ввода сообщений не сохраняется для анализа. Я получаю сообщение об ошибке:

несоответствие схемы для Comments.post; ожидаемая строка, но получен указатель "UserInfo = {error = несоответствие схемы для Comments.post; ожидаемая строка, но получен указатель, NSLocalizedDescription = несоответствие схемы для Comments.post; ожидаемая строка, но получен указатель, код = 111})

В приведенном ниже коде под методом:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

есть пара закомментированных функций, которые при запуске в приложении, когда пользователь нажимает на комментарии, имя пользователя или изображение, сохраняют комментарий с именем случайный комментарий1.

После использования тех же функций с небольшими изменениями по методу:

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")
        }

    }
    */


    }
}

Ожидаемый результат заключается в том, что комментарий должен успешно сохраняться после публикации на панели ввода сообщений, а также на панели анализа, поэтому при выходе и повторном запуске приложения опубликованный комментарий все равно должен быть там.

...