別のクラスから取得したデータでUILabelを更新しようとしています。そのため、ViewDidLoadでは、 ViewControllerのメソッドを呼び出してUILabelを更新します。ここで私が実行しようとしているコードの簡易版である:別のクラスで異なるメソッドを呼び出した後にメソッド内のUILabelを変更できない
import UIKit
class ViewController: UIViewController {
@IBOutlet var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
test().runTest()
}
func print() {
label.text = "test123"
}
}
およびその他のクラス:「致命的なエラー:
import UIKit
class test: UIView {
func runTest() {
ViewController().print()
}
}
私は、コンソールのことわざに印刷されたエラーメッセージを取得しておいてください。 label.text = "test123" "に
とエラー" オプションの値(lldb)をアンラップしながら、不意に言ってはnilが見つかりました: "スレッド1:EXC_BAD_INSTRUCTION(コード= EXC_(386_INVOP、サブコード= 0x0の)"
ご協力いただきありがとうございます。
ストーリーボードのラベルにコンセントを接続しましたか? – StevenOjo
あなたの 'runTest'関数では、あなたのView Controllerの新しいインスタンスを作成しています。これは、ストーリーボードへの参照なしにそうしているので、ラベルアウトレットはゼロです。あなたがそれを呼び出すとき、ビューコントローラのインスタンスを 'runTest'に渡すか、' runTest'が値を返すようにし、ビューコントローラ自身がラベルの更新を担当するようにします。 1つのクラスで別のクラスビューを更新するようなデザインが貧弱です – Paulw11
どのようにView Controllerを整理していますか、あなたの関数の名前を変更することをお勧めします。 – joshLor