接受的答案使我正确地解释了问题。我也编辑问题按大写字母点使答案点使其清除器在C++中将CFString转换为CFStringRef和CFErrorRef为CFError
我在MacOSX中有一个C++代码,它使用了一点CoreFoundation。
我在我的代码中使用以下函数CFPropertyListCreateWithData
,它将CFErrorRef *error
作为其参数之一。嗯,我创建CFErrorRef myError
并把它作为&myError
第一个问题:我认为这是在Documentation一个漏洞,因为它给了我一些很好的数据结果,但错误是NOT NULL。如果我有错误,数据应该是NULL,不是吗?还是我误解了文档?
第一个解决方案:如果没有错误,那么错误是无约束的,所以如果数据是空的,我必须检查错误。我想看看这是错误:而且我RELEASING使用CFRelease
一个未定义的对象,错误,导致我的程序段故障
问题二崩溃。 那么我进入这个函数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的
第四个问题:与我,如果我使用CFStringRef
和CFErrorRef
代替CFString
和CFError
的代码,它编译,但后来我有一个NSInvalidArgumentException
。编译时不应该有错误吗?我不喜欢RunTimeException ...第四种解决方案:如答案使我了解,我必须在数据为NULL时检查错误。在这种情况下,我正在检查一个带有未定义数据的错误,它使我知道了无效的变量异常。显然,由于问题在错误中存在未定义的值,这是运行时异常
嗯,总结一下,我只是想在我的C++应用程序中读写一个Info.plist
文件。我从中获得灵感,Saving and Restoring Property Lists,示例代码并对其进行了相当多的修改。如果你有一个工作示例如何阅读和修改一个Info.plist
文件,请告诉我:)但不使用PlistBuddy或其他工具,请仅使用C++ API。
得出结论:示例代码工作得很好,我只是误解了文档
感谢大家
你应该显示你的代码。通常,在编译时无法检测到大量错误,并且只能在运行时检测到。如果你对bundle的Info.plist中的属性感兴趣,你应该考虑['CFBundle' API](https://developer.apple.com/documentation/corefoundation/cbbundle?language=objc)。 –