2011-05-12 88 views
1

我有一個變量,它是一個CFStringRef,我執行檢查以確保它不是1特定值。如果是那麼我想將它設置成的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... 
} 

所以在如果else塊,我想將它設置爲「」,但X​​code的警告我它是一個無效的指針類型。

回答

3

CFStringRef是不可變的對象,所以你必須用不同的值來創建新實例:

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

請記住,你需要釋放價值。

但由於CFStringRef和NSString的類型是免費電話橋接您可以只使用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(數據)然後說data = CFStringCreateWithCString(NULL,「」,kCFStringEncodingUTF8) – 2011-05-12 13:52:19

+0

我想CFDictionaryGetValue返回沒有保留的字符串,所以你不應該在第一種情況下釋放它。但是在使用CFStringCreateWithCString創建數據之後 - 必須在之後釋放它 – Vladimir 2011-05-12 13:55:28