Я создаю приложение, в котором я использую NSOpenPanel
, связанный с меню Файл -> Открыть .... Когда пользователь выбирает файл .txt, программа читает его, добавляет значения в существующий массив строк и затем ДОЛЖНА перезагрузить данные в TableView
. Но когда я вызываю tableview.reloaddata()
, во время выполнения выдается следующая ошибка: Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
.
Вот код моего AppDelegate.swift
файла:
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
let vc = ViewController(nibName: "ViewController", bundle: nil)
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
}
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
}
@IBAction func openUnFichier(_ sender: NSMenuItem) {
let fichierPanel: NSOpenPanel = NSOpenPanel()
fichierPanel.allowsMultipleSelection = false
fichierPanel.canChooseFiles = true
fichierPanel.canChooseDirectories = false
fichierPanel.allowedFileTypes = ["txt"]
let response = fichierPanel.runModal()
if response == NSApplication.ModalResponse.OK{
guard let selectedURL = fichierPanel.url else{return}
do{
var fullDocument = try String(contentsOf: selectedURL, encoding: String.Encoding.utf8)
print(type(of: fullDocument))
var lines : [String] = fullDocument.components(separatedBy: "\n" as String)
for line in lines {
vc.test_data.append(line)
print(type(of: vc.test_data))
}
} catch let error as NSError{
print("Erreur!!!!!!! \(error)")
}
vc.tableView.reloadData() //IT CRASHES HERE
}else {
}
}
}
А вот код моего ViewController.swift
:
import Cocoa
import WebKit
class ViewController: NSViewController, NSTableViewDataSource{
public var test_data = ["https://www.youtube.com/watch?v=0AQFQMeOAig", "https://www.youtube.com/watch?v=domoD_w3uFw"]
var test_text = ""
var nextUrl = ""
//func
func refresh(){
tableView.reloadData()
}
@IBAction func plus(_ sender: NSButton) {
if urlInput.stringValue == "" {
} else {
test_text = urlInput.stringValue
test_data.append(test_text)
urlInput.stringValue = ""
tableView.reloadData()
// fonction du bouton +
}
}
@IBAction func nextLien(_ sender: NSButton) {
if test_data == [] {
} else {
nextUrl=test_data[0]
var monUrl = URL(string: nextUrl)
var maRequete = URLRequest(url: monUrl!)
view_web.load(maRequete)
test_data.remove(at: 0)
tableView.reloadData()
//fonction du bouton pour le prochain lien
}
}
func numberOfRows(in tableView: NSTableView) -> Int {
return test_data.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
return test_data[row]
}
//var
@IBOutlet weak var urlInput: NSTextField!
@IBOutlet weak var view_web: WKWebView!
@IBOutlet weak var tableView: NSTableView!
//func vitale
override func viewDidLoad() {
super.viewDidLoad()
let myURL = URL(string: "https://www.youtube.com")
let myRequest = URLRequest(url: myURL!)
view_web.configuration.preferences.plugInsEnabled = true
view_web.load(myRequest)
// Do any additional setup after loading the view.
}
}
Что я не понимаю, так это то, что viewtable.reloaddata()
отлично работает в файле ViewController.swift, но та же самая инструкция не работает, когда я пытаюсь сделать это в файле AppDelegate
.
У меня есть проверка, что мой массив строк (test_data) не пуст. (Он содержит 4 элемента после загрузки и извлечения данных из файла «.txt», который я создал сам.)
Я хотел бы знать, как можно исправить эту ошибку, чтобы данные отображались в моем TableView после анализа моего txt-файла.
Большое спасибо.