Day: May 17, 2015

Swift:NSTableViewのカラムを編集する

クリックされた行位置とカラム位置から編集対象のカラムを特定して・・・と考えてみたのですが、簡単な方法がありました。

ふたつつまずきました。

  • NSTableViewのメソッドをoverrideするとコンパイルエラーが出て、overrideを取るとここに飛んで来ません。
    ➡️原因はstoryboardの表が処理するクラスと接続されていないためでした。

dataSource—TableViewEXIF
delegate——TableViewEXIF

  • カラムのデータは次のメソッドをoverrideして、その中で書き換え処理をすれば簡単にできます。overrideでコンパイルエラーが出たとき、これをとってもOKです。

func tableView(aTableView: NSTableView, setObjectValue anObject: AnyObject?, 
forTableColumn aTableColumn: NSTableColumn?, row rowIndex: Int) {
//必要な処理を追加する
var wBool1:Bool = rcCom.ExecSearchWords(“\(aTableColumn)”,pSearch:”identifier”)
var wBool2:Bool = rcCom.ExecSearchWords(“\(aTableColumn)”,pSearch:”fexif”)
if wBool1 == false || wBool2 == false { return } 
else { }

 var wCell   = ExecGetCellinfo(rowIndex)
cm.wkArrayExif[rowIndex] = [“fid”:pID, “fname”:wCell.pName, “fexif”:anObject as! String]
}

注1. ExecSearchWordsは”\(aTableColumn)”にpSearchがあるか検索するメソッド。
注2. ExecGetCellinfoは行位置rowIndexの内容を取り出すメソッド。
注3. ここでは所定のidentifierのとき、ユーザーが書き換えた内容でカラムを更新しています。

今までNSTableViewの実装は配列を反映させるものと考えていたので、この方法は目から鱗でした。また、Cell BasedとView Basedがあるというのもはじめて知りました。実装はAPI Referenceを参照しましたが、次のブログがヒントになりました。
参考:Table Viewで表を表示する
参考:SwiftでOS Xアプリケーションのプログラミング – 表

Swift:文字列の検索

文字列の中に調べたい文字列が含まれているかどうか?

ただそれだけのことのために、( )やスペースを読み飛ばしてキーワード抽出するプログラムを長々書いてしまいました。とてつもない無駄。しかも、悪いことにバグ付き。 NSStringを使えば簡単に実現できました。

  • pKeys:調べたい文字列、pSearch:この文字列がpKeysの中にあるかどうか?
  • 返り値はBool true:存在した。 false:存在しなかった。
  • nilかどうかを調べる必要があるかもしれません。

func ExecSearchWords(pKeys:String, pSearch:String)->Bool {

if count(pKeys) <= 0
|| count(pSearch) <= 0
|| count(pKeys) < count(pSearch) { return false }
else { }

var wRange  = NSRange(location: 0, length: 0)
var wNSString: NSString = pKeys

wRange  = wNSString.rangeOfString(pSearch)
if wRange.length > 0 { return true }
else { return false }
}

参考:Swiftで文字列から任意の文字列を取得・残す方法