接受的回答给我问题的正确解释。我还编辑了在大写字母中逐点填写答案的问题,以使其更清晰
我在MacOSX中有一个c ++代码,它使用了一些CoreFoundation。
我在代码中使用以下函数CFPropertyListCreateWithData
,该函数将CFErrorRef *error
作为其参数之一。好吧,我创建CFErrorRef myError
并将其作为&myError
传递
第一个问题:我认为Documentation中存在一个错误,因为它可以为我提供一些良好的数据,但是错误不是NOT NULL。如果我有错误,数据应该为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。
结论:示例代码运行良好,我只是误解了文档
谢谢大家
最佳答案
我认为您误解了CFPropertyListCreateWithData()
的文档:如果成功,则返回值为非NULL,并且error
指向的内容未定义。除非error
返回NULL,否则不必担心CFPropertyListCreateWithData()
。CFErrorCopyFailureReason()
确实需要CFErrorRef
并返回CFStringRef
。您可能正在寻找它的Swift文档,在文档页面顶部将语言更改为Objective-C。
哪个呼叫引发异常,CFPropertyListCreateWithData()
?