9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NSTextField の初期化でハマりまくった件について

Posted at

Swift の勉強がてら、簡単なアプリを作ろうと思ってハマりまくりました。Qiitaの記事を含めあちこち調べたのですが、そのものズバリの解説をStackOverflow の日本語版で解説していただきました。
超はずかしい初心者の失敗ですが、後学のために共有したいと思います。

##やりたいこと
NSTextField のテキストボックスにあらかじめ文字列を代入して表示させたい。

View

真ん中のボックスが NSTextField です。

StoryboardのView

##失敗した 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)
    }
}

##成功したView
textField.png

##反省

  • init の段階で outlet の接続はまだ済んでいないということを知らなかった。ドキュメントはちゃんと読みましょう (^^;

  • 古いブログ記事を読んでも何がなんだかよくわからなかった。Apple 公式の最新リソースをちゃんとチェックしましょう (^o^;

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?