gpt4 book ai didi

cocoa - CFStringCreateByCombiningStrings 中可能存在错误

转载 作者:行者123 更新时间:2023-12-03 17:44:03 25 4
gpt4 key购买 nike

我遇到了一个无法解决的 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 名称对象的保留计数有关,但我无法弄清楚为什么它在某些情况下有效而在其他情况下无效。

最佳答案

CFMutableArrayRef filename_arr = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);

您创建了一个空数组。

CFArraySetValueAtIndex(filename_arr, 0, part_str);
CFArraySetValueAtIndex(filename_arr, 1, CFSTR("_"));
CFArraySetValueAtIndex(filename_arr, 2, file_name);
CFArraySetValueAtIndex(filename_arr, 3, file_ext);

然后尝试替换空数组的第一个到第四个元素。

我很惊讶您竟然能进行 CFStringCreateByCombiningStrings 调用。 NSMutableArray 会抛出异常。

The documentation for the CFArraySetValueAtIndex function表示您只能使用它来替换数组中已有的对象:

The index … must not lie outside the index space of theArray (0 to N-1 inclusive, where N is the count of the array before the operation).

您需要 CFArrayInsertValueAtIndexCFArrayAppendValue

关于cocoa - CFStringCreateByCombiningStrings 中可能存在错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4475492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com