0

公正な警告: 私は Objective-C をまったく知りません。PyObjC の Foundation モジュールを使用しています。

を作成するために使用する辞書がありますNSDictionary。例:

from Foundation import NSDictionary
d = {'a': 1, 'b': 2, 'c': 3}
nsd = NSDictionary(d)

nsdの内容をでファイルに書き込めることはわかっていますがnsd.writeToFile_atomically_()、すべての plist-y XML を含む文字列を取得する方法がわかりません。StringIOオブジェクトを使用できると思うかもしれませんが、次のようになります。

>>> import StringIO
>>> s = StringIO.StringIO()
>>> nsd.writeToFile_atomically_(s,True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: NSInvalidArgumentException - Class OC_PythonObject: no such selector: getFileSystemRepresentation:maxLength:

私はヘルプページの頭や尾を作ることができません.SOとウェブ全体を検索してみましたが、人々は私がやろうとしていることの逆をすることにもっと興味を持っているようです.

私が望むのは、次のようなことができることです:

plst = nsd.asPlistyString_()

または、 を使用する必要があるかもしれませんがNSSString、わかりません:

plst = NSString.makePlistyStringFromDictionary_(nsd)

いずれにせよ、ヤダヤダplstのようなものでしょう。"<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC"誰かが私を正しい方向に向けることができますか?

編集:私は知ってplistlibいますが、コードの将来の互換性を高めるために、Foundationでこれを直接実行しようとしています。(plistlibかなりいいですけどね。)

4

2 に答える 2

3

これはあなたの質問に直接答えるものではありませんが、標準ライブラリモジュールを使用すると、これをはるかに簡単に行うことができますplistlib:

import plistlib
d = {'a': 1, 'b': 2, 'c': 3}
plist_string = plistlib.writePlistToString(d)

結果:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>a</key>
    <integer>1</integer>
    <key>b</key>
    <integer>2</integer>
    <key>c</key>
    <integer>3</integer>
</dict>
</plist>
于 2013-07-13T03:56:39.080 に答える