接受的回答给我问题的正确解释。我还编辑了在大写字母中逐点填写答案的问题,以使其更清晰

我在MacOSX中有一个c ++代码,它使用了一些CoreFoundation。

我在代码中使用以下函数CFPropertyListCreateWithData,该函数将CFErrorRef *error作为其参数之一。好吧,我创建CFErrorRef myError并将其作为&myError传递

第一个问题:我认为Documentation中存在一个错误,因为它可以为我提供一些良好的数据,但是错误不是NOT NULL。如果我有错误,数据应该为NULL,不是吗?还是我误解了文档?

第一个解决方案:如果没有错误,则错误是不确定的,因此,只有在数据为空的情况下,我才必须检查错误。此外,我正在使用CFRelease一个未定义的对象(该错误),它导致我的程序因分段错误而崩溃。

第二个问题:我要检查哪个是错误。
好吧,我进入了这个功能CFErrorCopyFailureReasondoc here
 但是它需要一个CFError而不是CFErrorRef,并且给了我一个CFString。然后,如何将CFErrorRef转换为CFError?

第二种解决方案:没问题,我正在阅读SWIFT文档,而不是目标C文档

第三个问题:函数CFErrorCopyFailureReason给我一个CFString,但是我不知道CFString的定义位置!它不在CoreFoundation/CoreFoundation.h中,也不在CoreFoundation/CFString.h中,并且在尝试编译时出现未定义的类型错误。
然后:CFString在哪个文件中定义?我可以将其转换为CFStringRef,怎么做?

第三个解决方案:没问题,我正在阅读SWIFT的文档,而不是目标C的文档

第四个问题:使用我拥有的代码,如果我使用CFStringRefCFErrorRef而不是CFStringCFError,则可以编译,但是我有一个NSInvalidArgumentException。编译时是否应该没有错误?我不想要RunTimeException ...

第四种解决方案:答案是我理解的,只有在数据为空时,我才必须检查错误。在这种情况下,我正在使用未定义的数据来检查错误,这给了我无效的参数例外。显然,由于错误中的问题是未定义的值,因此这是运行时异常

好吧,总而言之,我只想在我的c ++应用程序中读写Info.plist文件。我从Saving and Restoring Property Lists示例代码中得到启发,并对其进行了相当多的修改。如果您有一个有效的示例如何读取和修改Info.plist文件,请告诉我:)但不使用PlistBuddy或其他工具,请仅使用c ++ API。

结论:示例代码运行良好,我只是误解了文档

谢谢大家

最佳答案

我认为您误解了CFPropertyListCreateWithData()的文档:如果成功,则返回值为非NULL,并且error指向的内容未定义。除非error返回NULL,否则不必担心CFPropertyListCreateWithData()

CFErrorCopyFailureReason()确实需要CFErrorRef并返回CFStringRef。您可能正在寻找它的Swift文档,在文档页面顶部将语言更改为Objective-C。

哪个呼叫引发异常,CFPropertyListCreateWithData()

10-08 06:59