gpt4 book ai didi

ios - 我的 IBAction 中的 NSDictionary 变为零

转载 作者:行者123 更新时间:2023-11-30 11:06:12 25 4
gpt4 key购买 nike

我有一个表格 View ,显示用户创建的事件。当您单击其中一个时,您将进入另一个页面,其中显示了事件的详细信息。

我正在使用 Firebase 并将 postID 从表格 View 传递到详细 View ,并且所有信息都在 NSDictionary 中正确传递。

但是,当我尝试从 viewDidLoadIBAction 中访问 NSDictionary 时,它告诉我 NSDictionary nil。当我检查 viewDidLoad 时,它不是 nil

我对编程和学习非常陌生,但我已经坚持了一段时间了,不知道出了什么问题或如何修复它

这是我的代码

import UIKit
import Firebase

class BeehiveViewViewController: UIViewController {



@IBOutlet weak var eventImage: UIImageView!
@IBOutlet weak var eventName: UILabel!
@IBOutlet weak var location: UILabel!
@IBOutlet weak var eventDate: UILabel!
@IBOutlet weak var eventHost: UILabel!
@IBOutlet weak var members: UILabel!
@IBOutlet weak var joinButton: roundButton!


var beehiveID: NSDictionary?
var ref = Database.database().reference()


override func viewDidLoad() {
super.viewDidLoad()

view.setGradientBackground(colourOne: primaryColor, colourTwo: secondaryColor)

let uid = Auth.auth().currentUser?.uid
ref.child("users").child(uid!).child(self.beehiveID?["pid"] as! String).observe(.value) { (snapshot) in

let uid = self.beehiveID!["pid"] as! String
self.beehiveID = snapshot.value as? NSDictionary
self.beehiveID?.setValue(uid, forKey: "pid")
}

let imageURL = self.beehiveID!["imageDownloadURL"] as! String

let url = URL(string: imageURL)
DispatchQueue.global(qos: .background).async {

let data = NSData(contentsOf: url!)
DispatchQueue.main.async {

self.eventImage.image = UIImage(data: data! as Data)



}
}

self.eventName.text = self.beehiveID?["eventName"] as? String
self.eventDate.text = self.beehiveID?["eventDate"] as? String
self.eventHost.text = self.beehiveID?["beehiveHost"] as? String
self.location.text = self.beehiveID?["location"] as? String

let uidd = Auth.auth().currentUser?.uid
Database.database().reference().child("users").child(uidd!).child("Posts").child(self.beehiveID?["pid"] as! String).child("Members").observe(.value) { (snapshot) in

let memberCount = snapshot.childrenCount
self.members.text = "\(memberCount)"
}

let userID = Auth.auth().currentUser?.uid
Database.database().reference().child("users").child(userID!).child("Posts").child(self.beehiveID?["pid"] as! String).observe(.value) { (snapshot) in

print(snapshot)

if (snapshot.exists()){

self.joinButton.setTitle("Remove Beehive", for: .normal)
}

else{

self.joinButton.setTitle("Join Beehive", for: .normal)
}
}



}

@IBAction func buttonPressed(_ sender: Any) {

if joinButton.titleLabel?.text == "Remove Beehive"{

let uid = Auth.auth().currentUser?.uid
let dbref = ref.child("users").child(uid!).child("Posts").child(beehiveID?["pid"] as! String)

//error is the line above that beehiveID?["pid"] is nil

dbref.removeValue()


navigationController?.popViewController(animated: true)

}

if joinButton.titleLabel?.text == "Join Beehive"{

let uid = Auth.auth().currentUser?.uid
let dbref = Database.database().reference().child("users").child(uid!).child("Posts").child("Members")
Database.database().reference().child("users").child(uid!).child("Name").observe(.value) { (nameSnapshot) in
let memberName = nameSnapshot.value as! String
let userObject = [memberName: uid]
dbref.updateChildValues(userObject as! [AnyHashable : String])
}

}
}

}

最佳答案

我假设您正在从前一个 Controller 传递 beeHive 的值,因为您尚未在任何地方初始化或获取它的值:-

尝试在 viewDidLoad 结束之前设置一个断点,以仔细检查该 block 中的字典是否不为 nil

self.beehiveID = snapshot.value as? NSDictionary

尝试使用“if let”或“guard”检查快照的值是否为零,因为您可能只是将 nil 值分配给 NSDictionary。另外,由于您使用可选值来分配每个值,因此它不会返回异常,而只是继续为每个属性分配 nil 值

请尝试一下并让我知道。很高兴为您提供帮助!

关于ios - 我的 IBAction 中的 NSDictionary 变为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52694436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com