c++ - 在 C++ 中将 CFString 转换为 CFStringRef 并将 CFErrorRef 转换为 CFError

标签 c++ macos

接受的答案给了我对问题的正确解释。我还编辑了问题,用大写字母逐点回答问题

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

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

传递

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

第一个解决方案:如果没有错误,错误是未定义的,所以我必须仅在数据为空时检查错误。此外,我正在使用 CFRelease 发布一个 undefined object ,该错误导致我的程序因段错误而崩溃

第二个问题:我想检查是哪个错误。 好吧,我进入这个函数 CFErrorCopyFailureReason, doc here , 但它需要一个 CFError 而不是 CFErrorRef,并给我一个 CFString。那么,如何将我的 CFErrorRef 转换为 CFError?

第二个解决方案:NOSENSE 问题,我正在阅读 SWIFT 而非 Objective-C 的文档

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

第三个解决方案:NOSENSE 问题,我正在阅读 SWIFT 而非 Objective-C 的文档

第四个问题:对于我的代码,如果我使用CFStringRefCFErrorRef 而不是CFString 并且CFError,它可以编译,但是我有一个 NSInvalidArgumentException。我不应该在编译时出错吗?我不喜欢 RunTimeException...

第四种解决方案:正如答案让我理解的那样,只有当数据为空时我才需要检查错误。在那种情况下,我正在检查一个带有未定义数据的错误,该错误使我出现了无效参数异常。显然,由于问题是错误中未定义的值,因此这是一个运行时异常

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

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

谢谢大家

最佳答案

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

CFErrorCopyFailureReason() 接受一个 CFErrorRef 并返回一个 CFStringRef。您可能正在查看它的 Swift 文档,在文档页面顶部将语言更改为 Objective-C。

哪个调用抛出异常,CFPropertyListCreateWithData()

关于c++ - 在 C++ 中将 CFString 转换为 CFStringRef 并将 CFErrorRef 转换为 CFError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45615422/

相关文章:

c++ - 如何在 C++ 中使函数线程安全?

C++如何实现这个接口(interface)配置?

node.js - 如何使用快捷键打开Electron App?

macos - FSharp.Charting.Gtk 在启动时崩溃

c++ - 线程安全有界队列在 Boost 1.54 中挂起

c++ - 在已在源中重载的 header 中使用模板中的方法

macos - 如何在 NSPersistentDocument 中预加载 Core Data 中的数据?

macos - 我可以在 OSX 中使用 iOS 的本地推送通知吗

macos - 无法在 emacs 中输入大括号和方括号

c++ - Visual Studio 2010 C++ 可以继承引用项目的包含路径吗?