答案接受了我对问题的正确解释。我也编写了一个问题,以大写字母的方式提出要点,以使其更清晰
我在MacOSX中有一个c ++代码,它使用了一些CoreFoundation。
我在代码中使用以下函数CFPropertyListCreateWithData
,其中CFErrorRef *error
作为其参数之一。好吧,我创建CFErrorRef myError
并将其作为&myError
第一个问题:我认为Documentation中存在一个错误,因为它为我提供了一些好的数据,但错误是非空的。如果我有错误,数据应为NULL,不应该是吗?或者我误解了文档?
第一个解决方案:如果没有错误,则错误未定,因此,如果数据为空,我只能检查错误。更多我发布使用CFRelease
一个未定义的对象,错误,导致我的程序崩溃并出现分段错误
第二个问题:我想检查哪个是错误。
好吧,我进入了这个函数CFErrorCopyFailureReason
,doc here,
但它需要CFError而不是CFErrorRef,并给我一个CFString。那么,我怎样才能将CFErrorRef转换为CFError?
第二个解决方案:难以置信的问题,我正在阅读SWIFT文件而不是目标-C
第三个问题:函数CFErrorCopyFailureReason
给了我一个CFString
,但我不知道CFString
的定义在哪里!它不在CoreFoundation/CoreFoundation.h
中,也不在CoreFoundation/CFString.h
中,当我尝试编译时,我有一个未定义的类型错误。
然后:在哪个文件CFString
中定义?我可以将其转换为CFStringRef
,我该怎么办呢?
第三个解决方案:难以置信的问题,我正在阅读SWIFT文件而不是目标-C
第四个问题:使用我的代码,如果我使用CFStringRef
和CFErrorRef
代替CFString
和CFError
,则会编译,但后来我有NSInvalidArgumentException
。我不应该在编译时出错吗?我不喜欢RunTimeException ...
第四个解决方案:正如我所理解的那样,我只有在数据为空时才能检查错误。在这种情况下,我正在检查一个错误,其中包含无效数据,这使我无效的论点异常。显而易见,由于问题在错误中不明确,这是一个运行时间异常
嗯,总而言之,我只想在我的c ++应用程序中读写Info.plist
文件。我从这个Saving and Restoring Property Lists示例代码中获取灵感,并对其进行了相当多的修改。如果您有一个工作示例如何阅读和修改Info.plist
文件,请告诉我:)但不使用 PlistBuddy 或其他工具,请只使用c ++ API。
结论:示例代码工作正常,我只是误解了文档
感谢大家
答案 0 :(得分:2)
我认为您误解了CFPropertyListCreateWithData()
的文档:如果成功,则返回值为非NULL,并且error
指向的内容未定义。除非error
返回NULL,否则不要担心CFPropertyListCreateWithData()
。
CFErrorCopyFailureReason()
确实需要CFErrorRef
并返回CFStringRef
。您可能正在查看Swift文档,将文档更改为文档页面顶部的Objective-C。
哪个电话会抛出异常CFPropertyListCreateWithData()
?