【发布时间】:2017-08-21 03:01:23
【问题描述】:
我需要一些认真的帮助。我试图在 Firebase 的帮助下在我的 Xcode 项目中创建一个数据库,但是在构建成功后我一直收到相同的错误,然后关闭给我这个错误:
线程 1 exc_bad_instruction(代码=exc_i386_invop 子代码=0x0)
知道这是什么意思吗?
这是错误所在的代码行。
let label2 = cell.viewWithTag(2)as! UILabel
这是所有代码
//
// Database.swift
// intern
//
// Created by Lani Daniels on 8/20/17.
// Copyright © 2017 Lani Daniels. All rights reserved.
//
import UIKit
import Firebase
import FirebaseDatabase
struct PostStruct {
let title: String
let message: String
}
class DatabaseViewController: UITableViewController {
var posts: [PostStruct] = []
override func viewDidLoad() {
super.viewDidLoad()
//
let databaseRef = Database.database().reference()
databaseRef.child("Posts").queryOrderedByKey().observe(.childAdded, with: {
snapshot in
let snapshotValue = snapshot.value as? NSDictionary
let title = snapshotValue?["title"] as? String
let message = snapshotValue?["message"] as? String
self.posts.insert(PostStruct(title: title ?? "", message: message ?? ""), at: 0)
self.tableView.reloadData()
})
post()
}
func post(){
let title = "Title"
let message = "Message"
let post : [String : AnyObject] = ["title" : title as AnyObject, "message" : message as AnyObject]
let databaseRef = Database.database().reference()
databaseRef.child("Posts").childByAutoId().setValue(post)
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return posts.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let label1 = cell.viewWithTag(1)as! UILabel
label1.text=posts[indexPath.row].title
let label2 = cell.viewWithTag(2)as! UILabel // Error code: thread 1 exc_bad_instruction (code=exc_i386_invop subcode=0x0)
label2.text=posts[indexPath.row].message
return cell
}
}
【问题讨论】:
-
您确定该单元格的标签带有 tag = 2 吗?尝试
?而不是!使其成为可选let label2 = cell.viewWithTag(2) as? UILabel label2?.text=posts[indexPath.row].message。如果这没有崩溃,则说明您的单元格没有任何带有标签 2 的子标签。
标签: swift xcode multithreading swift3 xcode8