在c ++

时间:2017-08-10 13:39:58

标签: c++ macos

答案接受了我对问题的正确解释。我也编写了一个问题,以大写字母的方式提出要点,以使其更清晰

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

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

传递

第一个问题:我认为Documentation中存在一个错误,因为它为我提供了一些好的数据,但错误是非空的。如果我有错误,数据应为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。

结论:示例代码工作正常,我只是误解了文档

感谢大家

1 个答案:

答案 0 :(得分:2)

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

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

哪个电话会抛出异常CFPropertyListCreateWithData()