【问题标题】:Getting error using CFTypeRef with ARC将 CFTypeRef 与 ARC 一起使用时出错
【发布时间】:2012-06-13 10:22:38
【问题描述】:

我基本上关注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;
} 

【问题讨论】:

    标签: ios keychain cftypes


    【解决方案1】:

    我认为您通过尝试转换指针到指针的参数来进行不必要的复杂类型转换。这个怎么样:

    CFTypeRef result = NULL;
    BOOL statusCode = SecItemCopyMatching((__bridge CFDictionaryRef)searchDictionary, &result);
    if (statusCode == errSecSuccess) {
        NSData *resultData = CFBridgingRelease(result);
        password = [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding];
    }
    

    【讨论】:

    • 我尝试了您在上面键入的代码,但现在我在线上出现错误:NSData *resultData = CFBridgingRelease(result); 我收到的错误消息是:ARC 不允许将 int 隐式转换为 NSData
    • 我有一个小写 f 用于 CFBridgingRelease (>.>)
    猜你喜欢
    • 2011-12-12
    • 2016-11-05
    • 2021-12-06
    • 2015-07-15
    • 2016-05-04
    • 2014-02-10
    • 2016-04-03
    • 2012-10-10
    • 2016-10-29
    相关资源
    最近更新 更多