Swift

Swift:再び意味不明のまま前進orderFront

この前登録したアプリと同じ構造で作っているはずなんですけどね。

この話に入る前に、余計なimportを削除し、この前登録したアプリと同じにしました。地図機能はないのでそれだけは削除。

それで、アプリ画面を閉じた後の再起動はFile➡️Openで新しいファイルをすることになります。ここもNSOpenPanelの場面で、基本的なシーケンスは同じです。しかし、applicationShouldTerminateAfterLastWindowClosedに飛んで行き、アプリが終了してしまいます(所定のopen/描画処理が終わった後、アプリのterminateではなく、veiwが立ち上がらないままです)。

このOpen処理は、アプリを終了する前にもIBActionで使っているもので、正常に動作しています。

ということは、作りの問題だ、と推測されます。ロジックは、アプリの起動直後と同じです。それで唯一違っていた箇所は、orderFrontです。

@IBOutlet var xbOutWindow:NSWindow!
xbOutWindow.orderFront(self)

この1行をOpenのIBActionに追加したらうまく行きました。理由はわかりません。

この1行を入れる前に、

func applicationShouldHandleReopen(sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
if flag == false && sender.windows.count > 0 { sender.windows[0].makeKeyAndOrderFront(self) }
return true
}

を有効にしてアプリを終了しないようにしてみました。これと比較したとき、動作的には(表示画面からすると)、Viewが起動されないことが問題のように見受けられます。Viewが立ち上がっていないから、Openの処理をしても終わってしまうという現象に思えます。

きっと何か理由があるはずですが、現時点ではそこまで突き止める能力がないのでここで保留にします。いつか正確にわかればいいです。明日は明日の風が吹く。

Categories: Swift, 技術