uta*_*hak 1 objective-c keychain void-pointers nsstring
我有一个与Keychain交互的程序.你在一个指针传递给一个空指针和钥匙扣引导它,我想,到了密码,也传递一个UInt32的指针,它会指向密码的长度.
然后我需要将它用作NSString,我试图直接将其转换为它,但它聚合了更多的位然后需要,这对密码不起作用.我试着用:
NSString* password=[NSString stringWithCharacters:passwordData length:passwordLength];
Run Code Online (Sandbox Code Playgroud)
这将密码更改为中文字符.不知道为什么.当我在调试模式下打印描述时,它给了我:
Printing description of password:
\u3039\u4839\u6d6f\u2165\u1566?
Run Code Online (Sandbox Code Playgroud)
我能够完美地使用它:
NSString* password=[NSString stringWithCString:passwordData length:passwordLength];
Run Code Online (Sandbox Code Playgroud)
但这是折旧的,我想避免使用它.我对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;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让NSString以适当的长度指向那里,让它成为正确的东西.谢谢您的帮助.这个地方很棒!
在淘到Apple网站后,我发现了这个方法:
- (id)initWithBytes:(const void *)bytes length:(NSUInteger)length encoding:(NSStringEncoding)encoding
Run Code Online (Sandbox Code Playgroud)
这很有效.
| 归档时间: |
|
| 查看次数: |
2510 次 |
| 最近记录: |