AppleScript の JavaScript for Automation で plist ファイルを作成する
上記の記事ではJSONファイルの書き出し保存を行った。
iOS でデータを扱う際には JSON より plist の方が読み込みが簡単なので plist 形式でのファイル保存もさらっておく。
plist の書き出しは NSArray
or NSDictionary
を writeToFile:atomically:
で書き出せば良い。
NSArray から plist 書き出し
NSMutableArray
を使って配列を組み立てて plist 書き出しを行う。
配列への値の設定は addObject:
メソッドを用いる。
array[0]
のように subscripting でアクセスする事はできない。
array = $.NSMutableArray.array;
array.addObject('abc');
array.addObject(123);
plist 書き出し
array.writeToFileAtomically(filePath.toString(), true);
NSDictionary から plist 書き出し
NSMutableDictionary
を使って辞書を組み立てて plist 書き出しを行う。
辞書への値の設定は setObject:forKey:
メソッドを用いる。
dict['key']
のように subscripting でアクセスする事はできない。
dict = $.NSMutableDictionary.dictionary; dict.setObjectForKey('abc', 'key1'); dict.setObjectForKey(123, 'key2');
plist 書き出し
array.writeToFileAtomically(filePath.toString(), true);
JavaScript の配列型、オブジェクト型から Objective-C の NSArray, NSDictionary に変換して plist 書き出し
上に書いた方法では配列と辞書の組み立てを全て Objective-C で行ったが、データ内容自体は JavaScript で組み立てて最後に Objective-C に渡して plist 書き出しする方法もある。
この方法だとデータの組み立てが JavaScript の文法で楽にできる。
まず JavaScript で適当に配列と辞書のデータを組み立てる。
array = [1, 2, 3]; array.push(['a', 'b', 'c']); dict = {'key1': array}; dict['key2'] = 'xyz'; dict['key3'] = {'x': 1, 'y': 2, 'z': 3};
そして ObjC.wrap()
関数を用いて JavaScript の primitive なデータ型を Objective-C のオブジェクトに変換する。
object = ObjC.wrap(dict);
この時、変数 object
は NSDictionary
に変換されているので writeToFile:atomically:
メソッドで書き出せば plist ファイルが作成される。
全体のコードは以下
Objective-C Bridge では NSArray
と NSDictionary
の subscripting を使用する事ができないので書きやすさとしてはこのように JavaScript でデータを組み立てて最終段階で Objective-C に渡す方が楽だと思う。
plist 書き出しの際は、plist に NSNull
を入れる事ができないので、JavaScript でのデータ組み立ての際に null
が入らないように注意する必要がある。