(Swift、OSX)NSViewControllerサブクラスで関数を編成する別の方法はありますか?
現在、ユーザー入力用のテキストボックスからなるストーリーボードを使用してアプリケーションのビューを管理するビューコントローラー(ViewControllerという名前)があります。ユーザーが何か間違ったことを入力した場合は、ユーザーにエラーを警告する関数(モーダル)を呼び出し、入力をリセットし、入力と前回の出力をリセットするか、またはウィンドウを閉じるだけです。
問題は、アラートコードだけで約60行のコード(適切なメッセージを表示する機能を持つ)があり、ViewController
のサブクラスである別のクラスに移動したいと考えています。その入力を適切にリセットする(つまり、入力文字列フィールドをクリアする)ためのユーザーインターフェイスと、上記の他のタスクを実行します。ViewController
ViewController
というサブクラスを作成しようとしました。ユーザーインターフェイスのプロパティは継承されていますが、XcodeはそのサブクラスにNSCoderでinitメソッドを実装したいと考えています。 (私の知る限り、これはNSViewControllerクラスの一部としてコントローラと通信するためにXcodeがストーリーボードまたは.xibを設定する方法ですが、これは私のimplmenetationとは無関係です)。 nil
またはデフォルトの初期化済みNSCoder()
オブジェクトを渡そうとすると、わかりにくいクラッシュが発生します。
これらの機能を整理する方法はありますか?または、私はそれらをViewControllerにすべて保持する必要がありますか?
編集:エラーがあるかどうかを確認するチェックを実行するErrorCheck
という既存のクラスもあります。 ViewContoller内で、入力が入力されると、ErrorCheckからのメソッドを含むguard
ステートメントがあり、何らかの方法で入力が無効であれば、の対応するメソッドが呼び出されます。
コードスニペット:
class ViewController: NSViewController {
// Input and output text fields
@IBOutlet weak var inputStr: NSTextField!
@IBOutlet weak var outputStr: NSTextField!
// Input and output conversion selection
@IBOutlet weak var inputSegments: NSSegmentedControl!
@IBOutlet weak var outputSegments: NSSegmentedControl!
@IBAction func outputIsSelected(sender: NSSegmentedControl) {
// Passing all UI elements in (not shown)
// Not ideal, want to be global obj (see below code)
guard ErrorCheck().stringIsNotEmpty(inputStr.stringValue) else {
ErrorResponse().invalidEmptyInput()
return
}
// 0 = DNA, 1 = mRNA, 2 = English
if (inputSegments.selectedSegment == 0) {
checkPossibleConversionAndConvertDNA()
} else if (inputSegments.selectedSegment == 1) {
checkPossibleConversionAndConvertmRNA()
} else if (inputSegments.selectedSegment == 2) {
checkPossibleConversionAndConvertEnglish()
}
}
}
を私はViewControllerををサブクラス化していない場合は、別の問題がある:私は同じ内UI値を渡すことはできませんように私は世界的に、はErrorResponseのオブジェクトを定義することはできませんスコープは初期化されているので、現在はそれぞれの対応する関数でErrorCheckオブジェクトを初期化しています。
コードを投稿しないので、具体的な回答はできません。しかし、NSAlertの新しいクラスサブクラスにアラートコードを入れ、プロトコルを使用してViewControllerと通信できると思います。 – luiyezheng
@luiyezhengコード例で更新 – Graystripe