2011-05-12 3 views
1

저는 CFStringRef 인 변수를 가지고 있으며, 특정 값이 아닌지 확인합니다. 그 다음의 경우 I는의는 NSString 동등한로 설정할 @ ""하지만, 엑스 코드 나 경고 "CFStringRef 값을 ""로 설정합니다.

이 여기에 코드 경우 다른 블록 그래서

CFStringRef data = = CFDictionaryGetValue(dict, kABPersonAddressStateKey); 

NSComparisonResult result = [(NSString *)data compare:element options:compareOptions]; 
if(NSOrderedAscending == result) { 
    // Do something here... 
} 
else if (NSOrderedSame == result) { 
    // Do another thing here if they match... 
    data = ""; 
} 
else { 
    // Try something else... 
} 

이다, 나는 그것이 설정하려면" 그것이 잘못된 포인터 유형이라는 것입니다.

data = CFStringCreateWithCString (NULL, "", kCFStringEncodingUTF8); 

을 그리고 당신은 그 값을 공개해야한다는 것을 기억 서로 다른 값으로 새로운 인스턴스를 생성해야하므로

답변

3

CFStringRef는 불변의 객체입니다.

그러나

CFStringRef 및 NSStrings 종류의 무료이기 때문에 그냥 (즉, 아마 쉽게 이해하고 나중에 지원하게됩니다) 코드에있는 NSString을 사용할 수 있습니다 브리지 :

NSString *data = (NSString*)CFDictionaryGetValue(dict, kABPersonAddressStateKey); 

NSComparisonResult result = [(NSString *)data compare:element options:compareOptions]; 
if(NSOrderedAscending == result) { 
    // Do something here... 
} 
else if (NSOrderedSame == result) { 
    // Do another thing here if they match... 
    data = @""; 
} 
else { 
    // Try something else... 
} 
+0

그래서 기본적으로 CFRelease (데이터) 다음 데이터 = CFStringCreateWithCString (NULL, "", kCFStringEncodingUTF8) –

+0

나는 당신이 첫 번째 경우에 그것을 공개해서는 안된다 유지 문자열을 CFDictionaryGetValue 반환 생각합니다. CFStringCreateWithCString으로 데이터를 생성 한 후에는 나중에 풀어야합니다. – Vladimir