2012-06-13 49 views
1

获取的错误,我基本上遵循this tutorial,并很快实现,因为我用的是ARC项目将无法编译。我成功地压制了使用所有错误__bridge(>>),但我仍然得到一个错误信息,我设法阅读this stack question,但不知道如何该决议适用于我的问题。使用CFTypeRef与ARC

基本上这是给我的问题的方法是这样的:

+ (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; 
} 

回答

4

我觉得你是想投的指针到指针参数进行不必要的复杂类型转换。这个怎么样:

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

我想你在上面输入的,但现在我正在上线的错误代码: 'NSData的* resultData = CFBridgingRelease(结果);' 我得到的错误信息是: 将int隐式转换为NSData不允许使用ARC – Chris

+0

对于CFBridgingRelease(>。>),我有一个小写的'f' – Chris