У меня есть программа, которая взаимодействует с цепочкой для ключей.Вы передаете указатель на пустой указатель, и цепочка для ключей направляет его, я полагаю, на пароль, вы также передаете указатель 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, и пустые указатели бросают меня в тупик.В режиме отладки я посмотрел на память, на которую указывал указатель, и она определенно находится в этой области памяти.Я попытался использовать 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 указывать правильную длину и иметь правильные значения?Спасибо за помощь.Это отличное место!