2017-08-10 8 views
0

答えが受け入れられました。問題の正しい説明が得られました。私はまた、代理店のポイントを代用することで問題を解決しました。CFStringをCFStringRefに変換し、CFErrorRefをCFErrorに変換します。

MacOSXにはCoreFoundationを使用しているC++コードがあります。

をパラメータの1つとする私のコードでは、CFPropertyListCreateWithDataという次の関数を使用します。まあ、私はCFErrorRef myErrorを作成して、まず問題

&myErrorとしてそれを渡す:私はそれが結果として、私にいくつかの良いデータが得られますが、エラーがNULLではないのでバグは、 Documentationであると思います。エラーが発生した場合、データはNULLでなければなりません。それとも私はドキュメンテーションを誤解しましたか?

最初の解決策:エラーがない場合、エラーは定義されていません。したがって、データがNULLの場合のみエラーをチェックする必要があります。私は誤りであるチェックしたい:また私は私のプログラムは、セグメンテーションフォールトでクラッシュさせCFRelease UNDEFINED OBJECT、ERROR、

第二の問題を使用したRELEASINGました。 この関数にはCFErrorCopyFailureReasondoc here、 が入りますが、CFErrorではなくCFErrorRefをとり、CFStringを返します。 CFErrorをCFErrorに変換するにはどうすればよいですか?

SECOND SOLUTION:NOSENSEの質問、私はSWIFTのドキュメントを読んAND NOTのObjective-C

であった

第三の問題:機能CFErrorCopyFailureReasonは私にCFStringを与えるが、CFStringが定義されている場所、私は知りません! CoreFoundation/CoreFoundation.hにはなく、CoreFoundation/CFString.hにはありません。コンパイルしようとすると、定義されていない型エラーが発生します。 次に:どのファイルがCFStringに定義されていますか? CFStringRefに変換できますか?どうすればいいですか?

第三の溶液:NOSENSEの質問、私はAND NOT OF SWIFTのドキュメントを読んでいたのObjective-C

第4の問題点:私はCFStringRefCFErrorRefの代わりに、CFStringCFErrorを使用している場合、私は、持っているコードで、それコンパイルしますが、私にはNSInvalidArgumentExceptionがあります。コンパイル時にエラーが発生するはずはありませんか?私はRunTimeExceptionが好きではないでしょう...

4番目の解決策:わかっているように、私はエラーがデータを失った場合にのみチェックしなければなりませんでした。その場合、私は、間違った誘因を除いた、定義されていないデータの誤りをチェックしていました。明らかに、私はちょうど私のC++アプリケーションのInfo.plistファイルを読み書きしたいと思っています。これは、エラーが発生したときにエラーが発生する可能性があります。私はこの点からインスピレーションを受けて、Saving and Restoring Property Listsのサンプルコードをかなり修正しました。 Info.plistファイルを読み込んで変更するにはサンプルがありますか?教えてください:) PlistBuddyまたは他のツールを使用してください。

は結論する:サンプルコードはうまく機能し、私はみんなに

おかげでドキュメントを誤解

+0

コードを表示する必要があります。一般に、コンパイル時には検出されず、実行時にのみ検出されるエラーがたくさんあります。バンドルのInfo.plistのプロパティに興味があるなら、['CFBundle' API](https://developer.apple.com/documentation/corefoundation/cfbundle?language=objc)を考慮する必要があります。 –

答えて

2

私はあなたがCFPropertyListCreateWithData()のドキュメントを誤解していると思う:それは成功した場合、戻り値はNULLで、およびerrorが指すものは定義されていません。 CFPropertyListCreateWithData()がNULLを返さない限り、errorを心配しないでください。

CFErrorCopyFailureReason()は、CFErrorRefを返し、CFStringRefを返します。 Swiftのマニュアルを見て、ドキュメントページの上部にあるObjective-Cに言語を変更してください。

例外をスローする呼び出しは、CFPropertyListCreateWithData()ですか?

+0

こんにちはブレンダン、ありがとう、私はこれが問題だと思う。私がスウィフトの文書を見ていた部分は、あなたが正しく言ったように、私もその文書を誤解していました。特に(他の小さな問題の一部)、私はセグメンテーションフォールトがありました。エラーが発生しなかったときでも 'CFRelease'を使って' CFPropertyListCreateWithData'のエラーを解放しようとしていたからです。 その場合、エラーが発生した場合のみエラーを出してください。これが正しいことを確認できますか? – n3mo

+0

はい、正しいです。 'CFPropertyListCreateWithData()'のヘッダには、 "データの解析中にエラーが発生した場合、戻り値はNULLになります。 CFErrorは、問題を記述します。これは、呼び出し元が " –

関連する問題