2012-01-10 2 views
1

このコードスニペットは、どの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を使用することはありません。

は、これまでのところ私は、アロケーションを削除しようとしています。

答えて

0

NSASCIIStringEncodingではなく、NSStringEncodingASCIIです。

+0

あなたは正しくタイプミスをしている間、正しい定数でさえも動作しません。何かをチェックするようにしましたが、1に変更すると動作します。私はCocoaをインポートするときにPythonブリッジでこれらを呼び出すことができることに慣れているので、それが問題の実際の根だと思います。 – acidprime

+0

ああ、良い点。定数は常にブリッジを介して定義されているわけではありません(PerlObjCの作業を多く行ってからしばらくしています)。 – MyztikJenz

関連する問題