【Swift】Window 表示その2【Cocoa】


こちらの続き。いや、続いてない。

結局のところ、そんなご大層な内容でもないので、MainMenu.xib に新規でWindowを配置して、

NSWindow.orderOut(self) //window を消す
NSWindow.makeKeyAndOrderFront(self)  //windowを表示する


で、コントロールすることに。

ヘタレですいません。

スポンサーサイト

【Swift】window 表示【Cocoa】


Macアプリで、バイナリファイルから得た情報を、InterfaceBuilder で作った window(= NewWindow.xib) を新たに開いて表示したかったんだけど、ちょっと引っ掛かったので備忘録。


最初は

func openNewWindow(){

  let windowController = NSWindowController(windowNibName: "NewWindow" )
  windowController.loadWindow()
  windowController.showWindow(self)

}

とか、こんな感じで、開きたいタイミングで呼び出してやれば良いのかと思ったんだけど、これだと表示されなかった。

で、NewWindow の属性を Bahavior → Visible At Launch にチェックを入れて

func openNewWindow(){

  let windowController = NSWindowController(windowNibName: "NewWindow" )
  //windowController.loadWindow() ここの行をコメントアウト
  windowController.showWindow(self)

}

としたら表示されるようになりました。
うーん、良く分からん。

しかし、そのウィンドウ内のテキストフィールドの書き換えはまだ出来ていない。
根本的な考え方が違っているのかもしれない。

【Swift】 ファイルの読み込みと保存【Mac】


ここのところファミコンのソフトを開発していたのですが、実装するデータを作るのに Mac で変換ツールを作ろうと思い立って、Swift を弄り始めました。

まぁ、変換ツールなので、基本、バイナリファイルを開いて、中身を変換して、バイナリかテキストファイルを書き出すって処理です。

なので、ファイル・オープンと、ファイル・セーブができれば7割がた出来たも同然。(うそ)
で、7割がたできたのですが、結構、時間が掛かってしまったので、備忘録。

といっても、調べたところワタクシの環境が、MacOSX 10.9.5Xcode Version 6.2Swift 1.1.0 なので、あまり需要はないとは思いますが。

というかさぁ、公式のドキュメント(とネットの情報)がガンガン最新の物に書き換わり、古いバージョンの物がなくなってるので、とてもとても苦労します。
結局のところ、Objective-C のコードを解析して、Swift に置き換えるようなことになってしまった。
じゃぁ、Objective-C で書いたらいいんじゃないかと思うけど、まぁ、ファイル数は半分になるし、コードも少ないし・・・と、面倒臭がりやのワタシはSwift の誘惑に負けるわけです。

ま、いいや、とりあえず、ファイルオープン。

    func openFile(){
       
        let openPanel = NSOpenPanel()
        openPanel.allowsMultipleSelection = false // 複数ファイルの選択を許すか
        openPanel.canChooseDirectories = false // ディレクトリを選択できるか
        openPanel.canCreateDirectories = false // ディレクトリを作成できるか
        openPanel.canChooseFiles = true // ファイルを選択できるか
        openPanel.allowedFileTypes = ["xxx","aaa"]// 選択できるファイル種別 :拡張子を指定

        openPanel.beginWithCompletionHandler({ (num) -> Void in

            if num == NSModalResponseOK {
           // OKボタンを押したら
                for fileURL in openPanel.URLs {
                    let filePath :String! = fileURL.resourceSpecifier
                    let decoadPath :String! = filePath.stringByRemovingPercentEncoding  // 日本語ファイルの場合
                    // 以下にファイルを開いてからの処理

                       let file = NSData(contentsOfFile: decoadPath)

                       //  読み込んだデータを配列にコピー
                       let fileLength = file?.length
                       var data = Array<uint8> (count:fileLength!, repeatedValue:0)
                       file?.getBytes(&data, length: fileLength!)
       
                }
           
            } else if num == NSModalResponseCancel {
           // キャンセルボタンを押したら

                //NSLog("Canceled")
            }
        })
    }



で、実装するには、

    @IBOutlet weak var fileOpen: NSMenuItem!
    func applicationDidFinishLaunching(aNotification: NSNotification) {
        // Insert code here to initialize your application
        openFile()
    }


こんな感じですかね。
アプリが起動したら、即ファイル選択って感じですけど。


でもって、ファイル保存(テキスト保存)

    func saveText(str: String){
   
        let savePanel = NSSavePanel()
        savePanel.canCreateDirectories = true     //この辺はファイル・オープンと一緒
        savePanel.showsTagField = false
        savePanel.nameFieldStringValue = "test.asm"
        savePanel.allowedFileTypes = ["txt"]

        savePanel.beginWithCompletionHandler { (result) in

            if result == NSFileHandlingPanelOKButton {
    //OKボタン

                let url = savePanel.URL!.path
                let path = url?.stringByReplacingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
              
                if (path != nil){
                   
                    if str.writeToFile(path!, atomically: true, encoding: NSUTF8StringEncoding){
                        print(str)
                    }else{  }
                }else{
                    return
                }

            }else{
     //OKボタン以外

            }
        }
    }



ファイルオープンは、色々なサイトさまを参考にさせて頂いて、割とすぐにできたんだけど、ファイル保存で手間取りました。
let url = savePanel.URL!.path で、URL をパスに変換しなくちゃならないということに気がつかなくて。
しかも、writeToURL を使おうとするとエラーが出るし。
いや、エラーがでるのはいいんだけど、Xcode が表示するエラーフィックスの候補がことごとく外れるという。
あれ、新しいバージョンだと改善されてるんだろか。

というわけで、あとはガシガシ変換すればOKなはず。
ガンバロー! おー!

キャンプファイヤー!【クラウドファンディング】


まぁ、ちょっとした出来心で、クラウド・ファンディングで資金を集めて何か作れないかなー? などと思って、CAMPFIRE を覗いてみた。

んだけど、その、なんだ、成功しているプロジェクトを見ると、別に資金難でもないんだなという印象。
商品などは、すでに用意されていて、そのブランディングのためとか、まぁ、音楽や出版などは物は出来ていて、販売費用とか(CDにしたり本にしたり)媒体化費用の補助とか。
どちらかというと、パトロン(支援者)を集めて、広告するほうがメインなのかな? という印象。

リターンも法人向け以外は、そういう物が元々好きな人が喜びそうな物などが設定されていて、投資的な意味合いはまったくないのね。もしかしたら、募金に近いのかも知れない。

まぁ、確かに、利益の何%を投資比率で分配、利益がなければリターンもなし、なんて条件じゃ、支援するほうも楽しくないものね。
そういうのは、ガチのファンド・マネージャー通してやれってことか。

まぁ、観測気球的にクラウド・ファンディングやってるところもありそうではある。
パトロン数が多ければ、銀行から資金調達するときに交渉しやすいってこともあるだろうし。
目標額に到達しなければ、プロジェクトの継続、中止も判断しやすいだろうしなぁ。

はてさて、どうしたもんじゃろうのぉ。

Swift 所感


ここのところ、Xcode の playground を使って、Swift を触っている。

全部を試すことはないだろうし、まだ始めたばかりなのですが、触ってみた感想など。

・色々できる。
 Cなどの書式でも、(完全互換ではないけど)いけそうな感じもあるし、Swift 独自の書式ならもっと簡素化できるって感じ。
 色々できるのはいいんだけど、どれが最適解なのか分からない。経験かなぁ?

・可読性が良くなる。
 もしかしたら、ここを重視してるのかも知れない。
 Objective-C が冗長だったので、記述は簡単というか短くなるような気がする。

・独自仕様が・・・。
 記述を少なくするためとか、柔軟性を持たせるためとか、色々あるとは思いますが、とにかく憶えることが一杯。
 まだ、文法をやっている段階なのに頭がパンクしそう。これからフレームワークとかAPIとか勉強しなきゃならないのに。


と、まぁ、便利な機能や面白そうな機能が付いているんだけど、まだ、実際にプログラムを始める段階に至ってない。
実際に組み始めたら、またレポートします。
今さらすぎて需要がないとは思うけど、自分が挫折しないために書いとく。