2011-05-12 85 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