我有一个带有帖子的表格视图,并且我试图创建与喜欢帖子类似的按钮。我专注于使其中一个按钮起作用,然后为下一个镜像代码。每次我单击都会使模拟器崩溃并引发错误
“无法将类型'__NSCFNumber'(0x10ec0ba38)的值强制转换为'NSDictionary'(0x10ec0ca78)。
我正在使用Firebase作为后端。我真的很新,很快,任何帮助将不胜感激。
***这是我的表格单元格****
class PrayerWallTableViewCell: UITableViewCell {
@IBOutlet weak var userNameLabel: UILabel!
@IBOutlet weak var prayerRequestLabel: UILabel!
@IBOutlet weak var wallTimeStamp: UILabel!
@IBOutlet weak var prayingButton: UIButton!
@IBOutlet weak var likeButtonCount: UILabel!
@IBOutlet weak var prayerButtonCount: UILabel!
var prayRef:DatabaseReference!
@IBAction func likeButton_TouchUpInside(_ sender: Any) {
prayRef = Database.database().reference().child("Prayers")
incrementLikes(forRef: prayRef)
}
func incrementLikes(forRef ref:DatabaseReference){
ref.runTransactionBlock({ (currentData: MutableData) -> TransactionResult in
if var post = currentData.value as? [String : AnyObject], let uid = Auth.auth().currentUser?.uid {
var stars: Dictionary<String, Bool>
stars = post["stars"] as? [String : Bool] ?? [:]
var starCount = post["starCount"] as? Int ?? 0
if let _ = stars[uid] {
// Unstar the post and remove self from stars
starCount -= 1
stars.removeValue(forKey: uid)
} else {
// Star the post and add self to stars
starCount += 1
stars[uid] = true
}
post["starCount"] = starCount as AnyObject?
post["stars"] = stars as AnyObject?
// Set value and report transaction success
currentData.value = post
return TransactionResult.success(withValue: currentData)
}
return TransactionResult.success(withValue: currentData)
}) { (error, committed, snapshot) in
if let error = error {
print(error.localizedDescription)
}
}
}
****这是我的带有表视图协议的视图控制器*****
var prayerRef: DatabaseReference?
var prayerDatabaseHandle:DatabaseHandle?
var prayerRequest = [String]()
var prayerTimestamps:[NSDate] = []
var userName = [String]()
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
prayerRef = Database.database().reference()
tableView.reloadData()
tableView.transform = CGAffineTransform(rotationAngle: -CGFloat.pi)
tableView.delegate = self
tableView.dataSource = self
prayerDatabaseHandle = prayerRef?.child("Prayers").observe(.childAdded, with: { (snaphot) in
let prayPost = snaphot.value as! [String: Any]
let praytimestamp = prayPost["praydate"] as! TimeInterval
let prayTimeDate:NSDate = NSDate(timeIntervalSince1970: praytimestamp/1000)
self.prayerTimestamps.append(prayTimeDate)
//self.prayerRequest.append(pray
// [""] as! String)
self.userName.append(prayPost["username"] as! String)
self.prayerRequest.append(prayPost["prayer"] as! String)
self.tableView.reloadData()
})
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return prayerRequest.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Prayer") as! PrayerWallTableViewCell
cell.prayerRequestLabel.lineBreakMode = .byWordWrapping
cell.prayerRequestLabel.numberOfLines = 8
cell.prayerRequestLabel.text = prayerRequest[indexPath.row]
cell.userNameLabel.text! = userName[indexPath.row]
let prayTempTimestamp:NSDate = prayerTimestamps[indexPath.row]
let prayTimestampDate:Date = prayTempTimestamp as Date
cell.wallTimeStamp.text = prayTimestampDate.timeAgoDisplay()
cell.transform = CGAffineTransform(rotationAngle: CGFloat.pi)
return cell
}
}
答案 0 :(得分:0)
您的代码中有一个返回Int值的标签或变量,您将其作为NSDictionary。首先在邮递员中检查您的回复,然后发布其屏幕快照,以便我提供更多帮助。