質問

私は、RESTfulなURLにアクセスし、結果を取り戻します。結果はJSONです。私は経由して文字列に応答を回します:

- (void)connectionDidFinishLoading:(NSURLConnection   *)connection {
NSString *json = [[NSString alloc] initWithBytes:[self.receivedData mutableBytes] length:[self.receivedData length] encoding:NSUTF8StringEncoding];

JSON変数は0x0の値を有します。その上に私のマウスは、私が<Invalid CFStringRefを参照してください>。どのように私はそれが無効である理由を伝えるために、これをデバッグすることができますか?私は、JSONパーサーでブラウザを介して戻って与えられたJSONをレンダリングします。それは罰金をチェックアウトします。

結果はURLにIDを入力することにより、バック与えられています。他のIDは問題なく結果を返します。結果セットがかなり大きいます。

役に立ちましたか?

解決

まず、私はセットアップにNSStringのをinitWithData:encoding:を使用します。小さな違いが、その方法は、理由があります。

そこで、私はそこに実際にあるものを見るためにself.receivedDataのhexdumpに対してを行うだろう。そのデータが正しくUTF8でエンコードされていない場合は、initWithData:encoding:は失敗します。

(グーグルのNSDataのための進ダンプがこれを行うには他の人のユーティリティ機能を見つけるために)

私は時々、Webサービスは、そのエンコーディングでずさんであることを見出しました。だから私は通常、このようにフォールバックを実装します:

NSString* html = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
if (html == nil) {
    html = [[NSString alloc] initWithData: data encoding: NSISOLatin1StringEncoding];
    if (html == nil) {
        html = [[NSString alloc] initWithData: data encoding: NSMacOSRomanStringEncoding];
    }
}

これは、これが必要であることを一種の悲しいですが、多くのWebサービスが書かれたか、正しく設定されていません。

他のヒント

バイトを見てNSLogを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top