У меня есть проблема с CFStringCreateByCombiningString, которую я не могу решить. Кажется, чтобы уклониться от объяснения:
CFMutableArrayRef filename_arr = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
// insert prefix
int part_prefix = part + 1;
CFStringRef part_str = CFNumberFormatterCreateStringWithValue(kCFAllocatorDefault, format_ref, kCFNumberIntType, &part_prefix);
CFArraySetValueAtIndex(filename_arr, 0, part_str);
// insert prefix separator
CFArraySetValueAtIndex(filename_arr, 1, CFSTR("_"));
// insert name
CFStringRef file_name = mKitManager.CreatePartName(part); // creates and returns a new CFStringRef
CFArraySetValueAtIndex(filename_arr, 2, file_name);
printf("file_name string length: %d\n", CFStringGetLength(file_name));
// add file type extension
CFStringRef file_ext = CFSTR(".aif");
CFArraySetValueAtIndex(filename_arr, 3, file_ext);
// create full file name
CFStringRef full_file_name = CFStringCreateByCombiningStrings(kCFAllocatorDefault, filename_arr, CFSTR(""));
printf("full_file_name string length: %d\n", CFStringGetLength(full_file_name));
При некоторых условиях полученная комбинированная строка короче, чем должна быть. Например, когда я вставляю строку имени в индекс 2, я также проверяю длину строки, скажем, что длина составляет 10 символов.
После вызова CFStringCreateByCombiningStrings результирующая строка иногда имеет длину всего 3 символа. Первые два элемента были правильно объединены, но был добавлен только первый символ строки имени, и расширение файла полностью не учитывалось.
Я могу воспроизвести это, но понятия не имею, почему это происходит. Возможная ошибка?
* Редактировать: Найдено решение проблемы. Я думаю, что проблема связана с сохранением счетчиков для объекта имени CFStringRef, но я не могу понять, почему он работает в некоторых обстоятельствах, а не в других.