【问题标题】:Adding Comment Replies to Posts as an Array of Strings in Class "Post"将评论回复添加为“帖子”类中的字符串数组
【发布时间】:2019-06-14 01:29:03
【问题描述】:

我创建了一个应用程序,用户可以在其中生成添加到 postTableView 的帖子。然后,用户可以单击 postTableView 的任何单元格以转到具有帖子标题和文本的独特视图,以及填充用户生成的 cmets 的 commentTableView。在commentTableView 下方是一个textView,您可以在其中写下您的评论和一个允许您提交评论的按钮。我正在尝试编写我的应用程序,以便当您按下按钮时,您在 textView 中编写的文本会附加到该帖子的唯一 cmets 数组中。这些 cmets 填充了 commentTableView。以下是我目前有缺陷的尝试:

这是帖子类:

import Foundation

class Post {
var id:String
var title: String
var text:String
var createdAt:Date
var comment: [String] = []

init(id: String, title: String,text:String,  timestamp:Double, comment: [String] = []) {
    self.id = id
    self.title = title
    self.text = text
    self.createdAt = Date(timeIntervalSince1970: timestamp / 1000)




}
static func parse(_ key:String, data:[String:Any]) -> Post? {
    if let title = data["text"] as? String,
        let text = data["title"] as? String,
        let timestamp = data["timestamp"] as? Double {
        return Post(id: key, title: title,  text: text, timestamp:timestamp, comment: [])
        }

    return nil
    }
}

这是当您单击 postTableView 中的任何单元格时获得的当前视图控制器:

import Foundation
import UIKit
import Firebase

class MainTextView: UIViewController {

@IBOutlet weak var titleText: UILabel!
@IBOutlet weak var mainText: UILabel!

@IBOutlet weak var commentPlaceHolder: UILabel!
@IBOutlet weak var newCommentLabel: UITextView!
var delegate:NewPostVCDelegate?
@IBAction func postReplyButton() {


    // Firebase code here
    let postRef = Database.database().reference().child("posts").childByAutoId()

    let postObject = [
        "comment": newCommentLabel.text,
        "timestamp": [".sv": "timestamp"]
        ] as [String : Any]

    postRef.setValue(postObject, withCompletionBlock: { error, ref in
        if error == nil {
            self.delegate!.didUploadPost(withID: ref.key!)
            self.dismiss(animated: true, completion: nil)
        }  else {
            // Handle error

        }
    })
    newCommentLabel.text = String()
    commentPlaceHolder.isHidden = false
}
var post: Post?

// MARK: - View Controller LifeCycle

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.setMain()

}

覆盖 func viewDidLoad() { super.viewDidLoad()

newCommentLabel.delegate = self as! UITextViewDelegate

}

private func setMain() {
    guard let post = self.post else {
        return
    }

    titleText.text = post.text
    mainText.text = post.title
}
func textViewDidChange(_commentView: UITextView) {

    commentPlaceHolder.isHidden = !newCommentLabel.text.isEmpty

}

}

如何修复我的错误并以编程方式执行我的愿景,即为每个帖子在评论部分填充用户?

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    对于

    “MainTextView”类没有初始化器

    替换

    var delegate:NewPostVCDelegate
    

    var delegate:NewPostVCDelegate?
    

    【讨论】:

    • 我收到错误:“'weak' 不得应用于非类绑定的 'NewPostVCDelegate';考虑添加具有类绑定的协议一致性”。当我删除 weak 并为 self.delegate!.didUploadPost(withID:ref.key!) 添加一个可选时,当我点击我的 postViewController 中的一个单元格时程序崩溃。
    • 你如何呈现MainTextView
    • 继续/呈现/推送?
    • 单击单元格时出现以下错误:“ 2019-06-13 19:19:16.687240+0200 FirebaseApp[70208:6990630] 无法转换类型为“FirebaseApp.MainTextView”的值( 0x1021b2ba0) 到 'UITextViewDelegate' (0x108cd14f8)。"
    • func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath as IndexPath, animated: true) if let destination = storyboard?.instantiateViewController(withIdentifier:"MainTextView") as? MainTextView { destination.post = (posts[indexPath.row]) navigationController?.pushViewController(destination, animated: true) } } }
    猜你喜欢
    • 2017-06-10
    • 2020-10-30
    • 2021-12-30
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    相关资源
    最近更新 更多