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).