キーチェーンとやり取りするプログラムがあります。void ポインターへのポインターを渡すと、キーチェーンがそれをパスワードに指示します。UInt32 ポインターも渡すと、パスワードの長さを指します。
次に、これを NSString として使用する必要があります。そのように直接キャストしようとしましたが、必要以上のビットを集約していたため、パスワードでは機能しません。私は使用しようとしました:
NSString* password=[NSString stringWithCharacters:passwordData length:passwordLength];
これにより、パスワードが中国語のような文字に変更されました。理由がわからない。デバッグモードで説明を印刷すると、次のようになります。
Printing description of password:
\u3039\u4839\u6d6f\u2165\u1566�
私はそれを完全に動作させることができました:
NSString* password=[NSString stringWithCString:passwordData length:passwordLength];
しかし、これは減価償却されたので、使用したくありません。私は C と Objective-C の両方に非常に慣れていないため、void ポインターによってループが発生します。デバッグ モードで、ポインターが指しているメモリを調べたところ、間違いなくそのメモリ位置にあります。const char* を使用してみましたが、変数が初期化されていない可能性があると言って気に入らなかったのです。
キーチェーンにアクセスするために使用している方法は次のとおりです
- (OSStatus) GetPasswordKeychain:(void*)passwordData length:(UInt32*)passwordLength label:(NSString*)serverName
{
status=SecKeychainFindGenericPassword(NULL, (UInt32)[serverName length], [serverName UTF8String], usernameLength, username,passwordLength , passwordData, NULL);
return status;
}
NSString が正しい長さでそこを指すようにし、それを正しいものにする方法はありますか。助けてくれてありがとう。この場所は素晴らしいです!