我基本上遵循this tutorial,并很快意识到该项目由于我使用ARC而无法编译。我设法使用__bridge
(>。>)抑制了所有错误,但仍然收到一条错误消息,并且设法读取this stack question,但不了解如何将解决方案应用于我的问题。
基本上给我问题的方法是这样的:
+ (NSString*)getPasswordForKey:(NSString*)aKey
{
NSString *password = nil;
NSMutableDictionary *searchDictionary = [self dictionaryForKey:aKey];
[searchDictionary setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit];
[searchDictionary setObject:(id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData];
NSData *result = nil;
SecItemCopyMatching((__bridge CFDictionaryRef)searchDictionary, (CFTypeRef *)&result);
if (result)
{
password = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
}
return password;
}
最佳答案
我认为您通过尝试强制转换指针到指针参数来进行不必要的复杂类型转换。这个怎么样:
CFTypeRef result = NULL;
BOOL statusCode = SecItemCopyMatching((__bridge CFDictionaryRef)searchDictionary, &result);
if (statusCode == errSecSuccess) {
NSData *resultData = CFBridgingRelease(result);
password = [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding];
}
关于ios - 在CFTypeRef和ARC中使用时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11012860/