CFStringGetCStringPtr возвращает NULL на iOS7

У меня есть следующий код в моем приложении:

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 ответ

Решение

CFStringGetCStringPtr() не гарантированно возвращает не NULL. Из документов (выделение добавлено):

Вернет ли эта функция действительный указатель или NULL, зависит от многих факторов, которые зависят от того, как была создана строка и ее свойства. Кроме того, результат функции может меняться в разных выпусках и на разных платформах. Так что не рассчитывайте на получение ненулевого результата от этой функции ни при каких обстоятельствах.

Всегда используйте запасной вариант CFStringGetCString(), но, что еще лучше, используйте вспомогательные методы Objective-C и NSString (например, UTF8String).

Другие вопросы по тегам