

`NSTextField` に文字列の初期値を View が描画される前に代入する方法を教えてください。

OSX 10.10.1(Yosemite) + Xcode 6.1 + Swift 1.1 で `NSTextFiled`
を利用したプログラムを作っています。NSTextField を初期化するプログラムを書こうとしたところ、次のようなエラーがでました。

**fatal error: unexpectedly found nil while unwrapping an Optional value**

fatal error になる原因は、`NSTextField.stringValue` が `nil` であるにもかかわらず unwrap
されたからだと思いますが、どこで初期化するべきか、よくわかりませんでした。

また、`NSTextField` は初期値を表示することがあまりないためか、初期値をセットするコードがうまく探せませんでした。Objective-C
であれば `AppDelegate` で初期化するとの記事を読みましたが、Swift では `ViewController`
でするべきという話もあり、よくわかりませんでした。

playground で次のコードを動かしてみました。

[code]

    import Cocoa
    
    var str = "Hello, playground"
    var strnil: String! = nil
    
    strnil = str
    println("\(strnil)")
    
[/code]

は特に問題なく動くようでした。ですので、ViewController や Storyboard
周りの設定が悪いのか、初期化する位置が悪いのだと想像しているのですが…  
Storyboard の画面のサンプルとコードは以下のとおりです。AppDelegate はデフォルトのままです。  
よろしくお願いいたします。

## ViewController.swift

[code]

        import Cocoa
        
        class ViewController: NSViewController {
        
            @IBOutlet weak var textField: NSTextField!
            
            override func viewDidLoad() {
                super.viewDidLoad()
        
                // Do any additional setup after loading the view.
            }
        
            override var representedObject: AnyObject? {
                didSet {
                // Update the view, if already loaded.
                }
            }
        
            required init?(coder: NSCoder) {
                //fatalError("init(coder:) has not been implemented")
                
                super.init(coder: coder)
                
                textField.stringValue = "a string"
        
            }
        }
    
[/code]

## Storyboardのサンプル

![StoryboardのView](https://i.stack.imgur.com/mia4i.png)


CC BY-SA 3.0
2014-12-18T10:59:19.760
2032
2014-12-18T12:45:01.557
2020-06-17T08:14:45.997
-1
4950
question
macos objective-c swift
NSTextField の初期化の方法について


iOS同様、`viewDidLoad()`で行えば良いと思います。  
initの段階ではoutletの接続が済んでいないので、textFieldはまだ使えません。これらの準備が完了するのが、`NSViewController`の`viewDidLoad()`(10.9以前は`awakeFromNib()`)です。

なお、storyboardを使った場合、AppDelegateはstoryboard内のApplication
Sceneにあるuiにしか接続できなくなりました。  
uiのセットアップは、そのviewを管理する`NSViewController`でやれ、というのがappleの方針のようです。


CC BY-SA 3.0
2014-12-18T12:45:01.557
2039
2014-12-18T12:45:01.557
3154
2032
answer