1

私のアプリケーションはNSTaskを使用してPythonスクリプトを開始し、スクリプトはNSPipeを介して配列を返します。データを読み取り、文字列に貼り付けて表示します。

NSMutableData *data = [[NSMutableData alloc] init];
NSData *readData;

while ((readData = [readHandle availableData])&& [readData length]) {
    [data appendData: readData];
}


NSString *string = [[NSString alloc] 
                    initWithData: data 
                    encoding: NSUTF8StringEncoding];

それはすべて問題ありませんが、文字列ではなく配列として保持する必要があることに気付きました。データ(NSPipeから返されたデータ)から配列を開始するメソッドが見つかりません。どうやってやるの?私が見つけた最も近いものはおそらく使用しています:

[NSPropertyListSerialization dataWithPropertyList:format:options:error:]

...しかし、「プロパティリスト」自体は必要ありません。最初にデータをplistに変換する必要がありますか?

編集:思ったよりも複雑だと気づきました。Pythonは辞書の配列を返しますが、辞書には文字列があります。これらの文字列にはコンマやその他の文字を含めることができるため、「、」区切り文字を使用して文字列を分割することはできないと思います。

Pythonの場合:

msg_set = []
msg_set = [
   dict(mts="t,s1", mfrom="f@ro,m1", msbj="msb,j1", mbody="bod,y1", mid="i,d1"),
   dict(mts="ts2", mfrom="from2", msbj="msb,j2", mbody="body2", mid="id2")
]
print msg_set # <- this is what python returns
4

2 に答える 2

1

最初にデータを JSON に変換し (dasblinkenlight の回答に関するコメントを見ましたが、既に回答を入力していました)、それを Cocoa に渡します。このようなもの:

パイソンサイド

import json
#...
json.dumps(msg_set) # <- return this one instead

Objective-C 側

NSString *myPythonJson = @""; // <- Whatever you got from python
NSError *error = nil;
id myObjectsFromJson = [NSJSONSerialization JSONObjectWithData:[myPythonJson dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:&error];
于 2012-08-21T15:40:02.107 に答える
1

返されるデータがコンマなどの区切り文字を含む配列を表している場合、@","文字列を取得して、次のように配列に分割できます。

NSString *string = [[NSString alloc] 
                initWithData: data 
                encoding: NSUTF8StringEncoding];
NSArray *array = [string componentsSeparatedByString:@","];

送信側と同じ区切り文字を使用する必要があります。複数の文字を区切り文字として使用できる場合は、componentsSeparatedByCharactersInSet:代わりに次の文字を使用できます。

NSArray *array = [string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
于 2012-08-21T14:56:53.300 に答える