Swift の勉強がてら、簡単なアプリを作ろうと思ってハマりまくりました。Qiitaの記事を含めあちこち調べたのですが、そのものズバリの解説をStackOverflow の日本語版で解説していただきました。
超はずかしい初心者の失敗ですが、後学のために共有したいと思います。
##やりたいこと
NSTextField のテキストボックスにあらかじめ文字列を代入して表示させたい。
View
真ん中のボックスが NSTextField です。
##失敗した Code
ViewController.swift
import Cocoa
class ViewController: NSViewController {
@IBOutlet weak var textField: NSTextField!
override func viewDidLoad() {
super.viewDidLoad()
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
required init?(coder: NSCoder) {
super.init(coder: coder)
textField.stringValue = "a string"
}
}
これが、次のようなエラーを起こします。
fatal error: unexpectedly found nil while unwrapping an Optional value
##成功した Code
NSTextField への代入が init?(coder:coder)
から override func viewDidLoad()
に移動しています。
ViewController.swift
class ViewController: NSViewController {
@IBOutlet weak var textField: NSTextField!
override func viewDidLoad() {
super.viewDidLoad()
textField.stringValue = "a string"
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
}
##反省
-
init の段階で outlet の接続はまだ済んでいないということを知らなかった。ドキュメントはちゃんと読みましょう (^^;
-
古いブログ記事を読んでも何がなんだかよくわからなかった。Apple 公式の最新リソースをちゃんとチェックしましょう (^o^;