我想我在这里有一个奇怪的......我正在接受
致命错误:在解包可选值时意外发现nil
当我尝试从我的Firebase数据库获取我的tableview数据时。我在我的应用程序的另一部分使用了代码并且它工作得很好,所以不确定为什么它在这里不起作用...
我建立了一个数据模型:
import Foundation
import Firebase
import FirebaseDatabase
class Modules {
private var _originalModules: String!
private var _imageUrl: String!
private var _postKey: String!
private var _postRef: FIRDatabaseReference!
var originalModules: String {
return _originalModules
}
var imageUrl: String {
return _imageUrl
}
var postKey: String {
return _postKey
}
init(originalModules: String, imageUrl: String) {
self._originalModules = originalModules
// self._imageUrl = caption
}
init(postKey: String, postData: Dictionary<String, AnyObject>) {
self._postKey = postKey
if let originalModules = postData["originalModules"] as? String {
self._originalModules = originalModules
}
if let imageUrl = postData["imageUrl"] as? String {
self._imageUrl = imageUrl
_postRef = DataService.ds.REF_MODULE.child(_postKey)
}
}
}
我认为我已连接到数据库,因为我可以使用以下代码将正确的数据打印到领事中:
DataService.ds.REF_MODULE.queryOrdered(byChild: "originalModules").observe(.value, with: { (snapshot) in
self.modulesArray = []
if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshot {
print("SNAP: \(snap)")
然后当我尝试将这些数据放入带有下面代码的数组中时,我无法打印到领事中,我收到上述错误。
if let postDict = snap.value as? Dictionary<String, AnyObject>{
let key = snap.key as String
let post = Modules(postKey: key, postData: postDict)
self.modulesArray.insert(post, at: 0)
//self.modulesArray.append(post)
print ("This is the array from Firebase: \(self.modulesArray)")
该错误还突出显示数据模型中返回_originalModules的行,因此我假设数组为空,因为我没有正确链接数据调用和数组
非常感谢任何和所有帮助!如果您需要任何澄清,请告诉我,以便为我提供解决方案。
UPDATE!数据库结构
{
"Module" : {
"originalModules" : {
"CreatingResults" : "Creating Results",
"EffectiveCommunication" : "Effective Communication",
"PresentationSkills" : "Presentation Skills",
"ProblemSolving" : "Problem Solving",
"SelfAwareness" : "Self Awareness",
"Teamwork" : "Teamwork"
}
},
"posts" : {
"-KcTZfFT58IPT5ZJJRPX" : {
"caption" : "hello?",
"imageUrl" : "https://firebasestorage.googleapis.com",
"likes" : 1
},
"-KcTZodrcehJ-VmSU0Lh" : {
"caption" : "Erin is a nerd",
"imageUrl" : "https://firebasestorage.googleapis.com",
"likes" : 1
},
}
以及它的价值 - tableview代码...
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let post = modulesArray[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: textCellIdentifier, for: indexPath) as! PerfectPracticeTableViewCell
cell.configureCell(post: post)
return cell
}
和configureCell代码:
class PerfectPracticeTableViewCell: UITableViewCell {
@IBOutlet weak var ppTableLabel: UILabel!
@IBOutlet weak var ppTableImage: UIImageView!
@IBOutlet weak var backgroundCardView: UIView!
var modulesArray: Modules!
func configureCell(post: Modules) {
self.modulesArray = post
self.ppTableLabel?.text = post.originalModules
// cell.ppTableImage?.image = image[(indexPath as NSIndexPath).row]
}