このコードスニペットは、どのMac OS Xシステムでも動作するはずの例です。PerlObjCBridge文字列からPlistを読み込む方が良い(誤ったNSStringEncoding値0x0000エンコーディングエラーのため)
#!/usr/bin/perl
use Foundation;
my $dscl = "/usr/bin/dscl";
sub getGeneratedUID(){
my $name = shift;
my $command = "$dscl -plist . -read /Users/$name GeneratedUID";
print "$command\n";
my $output = `$command`;
my $plist = NSString->alloc()->initWithCString_encoding_($output,NSStringEncodingASCII);
my $data = $plist->dataUsingEncoding_(NSStringEncodingASCII);
my $record = NSPropertyListSerialization->propertyListWithData_options_format_error_($data,NSPropertyListImmutable,0,0);
my $array = $record->objectForKey_('dsAttrTypeStandard:GeneratedUID');
return $array->objectAtIndex_(0)->description()->UTF8String();
}
my $logname = $ENV{'LOGNAME'};
my $guid = &getGeneratedUID($logname);
print "My GUID: $guid\n";
私はMac OS Xディレクトリサービスコマンドライン(dscl)ユーティリティのperlラッパーを作成しています。これはサイトの要件のためにperlでなければならず、このコマンドが何年もの間slighly出力を変更したため、Appleのプロパティリストとして出力をフォーマットする機能を使用しています。私は何年にも渡ってNSPropertyListSerialization-> propertyListWithDataを使用しました。一般的な考え方は、文字列をデータに変換すると、文字列からNSDictionaryを作成します。したがって、質問のタイトルはより良いですplist出力を解析する方法。私はこの方法だと思い、その後エンコーディングエラーを把握することができます場合は
my $plist = NSString->alloc()->initWithCString_encoding_($output,NSStringEncodingASCII);
だから、この行を周りグーグル
2012-01-10 10:57:31.270 perl5.12[1876:1507] Incorrect NSStringEncoding value 0x0000 detected. Assuming NSASCIIStringEncoding. Will stop this compatiblity mapping behavior in the near future.
は私が実現されています。これまでのところ、このコードは、それが次のエラーを与えるんが、動作します私のためにはうまくいくでしょうが、この情報を解析するより良い提案があれば、私はそれを聞きたいと思うでしょう。しかし、私は本当に私が似たような質問を見つけたが、ブリッジを使用してこの種のエラーを扱うものは何もないことを望む、2つの文字列をブリッジするために使用すべきエンコーディングまたはメソッドを簡単に質問したいと思う。
my $plist = NSString->stringWithCString_($output);
私はこのエラーは致命的なものではありません実現が、私はそれを把握するまで、私はむしろ、このmethodlogyを使用することはありません。
は、これまでのところ私は、アロケーションを削除しようとしています。
あなたは正しくタイプミスをしている間、正しい定数でさえも動作しません。何かをチェックするようにしましたが、1に変更すると動作します。私はCocoaをインポートするときにPythonブリッジでこれらを呼び出すことができることに慣れているので、それが問題の実際の根だと思います。 – acidprime
ああ、良い点。定数は常にブリッジを介して定義されているわけではありません(PerlObjCの作業を多く行ってからしばらくしています)。 – MyztikJenz