2013-09-24 4 views
2

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

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

    //.....     
} 

Это было вокруг с прошивкой 5, и всегда работал. С момента выпуска iOS 7, CFStringGetCStringPtr возвращает NULL. Добавление следующего кода, решил его:

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

Тем не менее, я хотел бы знать, если кто знает, что вызывает проблему?

ответ

1

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

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

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

+0

Спасибо за ссылку, что я в конечном итоге делаю :) – Yoshkebab

 Смежные вопросы

  • Нет связанных вопросов^_^