CFStringGetCStringPtr在iOS7上返回NULL

时间:2013-09-24 08:26:47

标签: ios7 cfstring

我的应用程序中有以下代码:

static void foo(CFStringRef str)
{
    CFStringEncoding encoding = CFStringGetSystemEncoding();
    const char * cString = CFStringGetCStringPtr(str, encoding);

    //.....                
}

它自iOS 5以来一直存在,并且始终有效。 自iOS 7发布以来,CFStringGetCStringPtr返回NULL。 添加以下代码已经解决了它:

if (cString==NULL)
{
    cString = [
        ((NSString *)str) cStringUsingEncoding:[NSString defaultCStringEncoding]
    ];
}

不过,我想知道是否有人知道导致问题的原因是什么?

1 个答案:

答案 0 :(得分:2)

不保证CFStringGetCStringPtr()返回非NULL。从文档(强调添加):

  

此函数是否返回有效指针或NULL取决于许多因素,所有因素都取决于字符串的创建方式及其属性。 此外,函数结果可能会在不同版本之间和不同平台上发生变化。因此,在任何情况下都不要指望从此函数接收非NULL结果。

总是有CFStringGetCString()的回退,但更好的是,使用Objective-C和NSString的帮助方法(例如UTF8String)。