프로그램이 실행되는 동안 tableView
을 동적으로 업데이트하려고합니다.tableView.reloadData() 호출시 "치명적인 오류"가 발생하여 tableView가 제대로 연결되었습니다.
보기 컨트롤러 :
여기fatal error: unexpectedly found nil while unwrapping an Optional value
는 관련 코드입니다 : 난 내가
self.eventTable.reloadData()
를 호출하는 버튼을 누를 때 올바르게에서 데이터로드,하지만 난이 오류가 발생하는 배열을 업데이트 한 생각 이 기능은 때 잘 작동
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// Add table to keep track of events
@IBOutlet weak var eventTable: UITableView!
var eventData = [Session]()
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return eventData.count;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cellReuseIdentifier") as! eventTableViewCell
let event = eventData[indexPath.row]
cell.eventLabel.text = event.session
return cell
}
private func loadEvents(event: String) {
guard let event1 = Session(session: event) else {
fatalError("Unable to instantiate event")
}
eventData += [event1]
DispatchQueue.main.async() {
self.eventTable.reloadData()
}
}
func testPrint() {
loadEvents(event: "testing cell adding")
//self.eventTable.reloadData()
viewWillAppear(false)
print("This is a test print");
}
}
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
//Timer view
@IBOutlet weak var playButton: UIBarButtonItem!;
@IBOutlet weak var pauseButton: UIBarButtonItem!;
@IBOutlet weak var refreshButton: UIBarButtonItem!;
@IBOutlet weak var timerLabel: UILabel!
var counter = 0
var timer = Timer()
var isTimerRunning = false
//testing view container
var viewShowing = 1;
override func viewDidLoad() {
// Do any additional setup after loading the view, typically from a nib.
pauseButton.isEnabled = false
hideAll();
self.basicContainer.isUserInteractionEnabled = true;
self.basicContainer.isHidden = false;
self.timerLabel.text = String("00:00:00");
eventTable.dataSource = self
eventTable.delegate = self
super.viewDidLoad()
loadEvents(event: "timer start")
}
... ViewDidLoad()
에서 호출되지만 다른 클래스의 단추 ("이것은 테스트 인쇄입니다"라는 메시지가 콘솔에 인쇄되므로 버튼 호출이 처리되고 있음을 알 수 있음)에서 호출 될 때가 아닙니다.
"타이머 시작"및 "셀 추가 테스트"(이상적으로는 "셀 추가 테스트"가 맨 위에 있음)를 나타내는 tableView (eventTable)
로드 재실행이 예상됩니다.
eventTable이 스토리 보드에 연결되어 있다는 점을 강조하고 싶습니다. 여기서는 일반적인 문제인 것 같습니다.
Session.swift
import Foundation
import UIKit
class Session {
//MARK: Properties
var session: String
//MARK: Initialization
init?(session: String) {
guard !session.isEmpty else {
return nil
}
self.session = session
}
}
eventTableViewCell.swift
import Foundation
import UIKit
class eventTableViewCell: UITableViewCell {
//MARK: Properties
@IBOutlet weak var eventLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
감사 : 사람들은 도움이되는 경우
다음은 Session.swift
파일과 eventTableViewCell.swift
파일입니다!
편집 : 내가 어디 testPrint() 호출 ViewController.
import UIKit
class BasicViewController: UIViewController {
var VC = ViewController();
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//Basic buttons
@IBOutlet weak var warmButton: UIButton!
@IBOutlet weak var dryButton: UIButton!
@IBOutlet weak var stimulateButton: UIButton!
@IBOutlet weak var controlButton: UIButton!
@IBOutlet weak var bedButton: UIButton!
@IBOutlet weak var tempButton: UIButton!
@IBOutlet weak var pulseButton: UIButton!
@IBOutlet weak var ecgButton: UIButton!
@IBOutlet weak var apgarButton: UIButton!
@IBOutlet weak var helpButton: UIButton!
//APGAR options
@IBOutlet weak var skinColor: UIButton!
@IBOutlet weak var pulse: UIButton!
@IBOutlet weak var grimace: UIButton!
@IBOutlet weak var flexion: UIButton!
@IBOutlet weak var respiratoryEffort: UIButton!
@IBAction func warmButton(sender: AnyObject) {
VC.testPrint();
}
}
문제를 일으키는 새로운 ViewController를 인스턴스화한다고 말하는 것이 좋습니다. 이 문제를 해결하려면 어떻게해야합니까? 스위프트
내가 생각
다른 클래스에서이 함수를 어디에서 호출하고 있습니까? – 3stud1ant3
'viewWillAppear'와 같은 뷰 컨트롤러주기 이벤트를 직접 호출하지 마십시오. – Paulw11
@ 3stud1ant3이 질문 할 때, 당신이 버튼을 처리하고있는 곳과 그 함수를 어떻게 호출하고 있는가?가능성은 스토리 보드 장면에 연결되어 있지 않은보기 컨트롤러의 새 인스턴스를 인스턴스화하고 있으므로 테이블보기가 nil입니다. – Paulw11