1

電子メール リンクでオブジェクトの JSON 表現を送信しようとしています。受信者がリンクを開くと、私のアプリは URL スキームを介して応答します。URL から JSON を抽出し、オブジェクトを再構築する必要があります。

を構築して使用することにより、オブジェクトをシリアル化していますNSDictionary:

return [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];

次に何が来るかわかりません。どういうわけか、これNSDataを文字列に変換して、URL スキームにプレフィックスを付けてリンクで使用できるようにする必要があります。

受信側では、プレフィックスを削除して (これは可能です)、文字列を . に戻す必要がありNSDataます。

これを行うための正しい方法は何ですか? また、データの内容が JSON 文字列エンコーディングに干渉しないようにするにはどうすればよいですか (たとえば、オブジェクトに特殊文字を含むテキストが含まれている場合)。

4

1 に答える 1

1

エンコードされた JSON には、URL の一部である場合にも意味を持つ文字があるため、追加のエンコード手順を実行する必要があります。実際にやりたいことは、データをURL エンコードして、結果の文字列のどの文字も、アプリケーションが期待する URL と競合しないようにすることです。

最初のステップは、データを に変換することです (デフォルトでは UTF-8 でエンコードされているNSStringため、これは基本的に単なる memcpyです)。NSStrings

NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

さて、 という関数を使いたくなるかもしれ-stringByAddingPercentEscapesUsingEncodingませんが、関連するすべての文字を完全にエスケープするのに十分な仕事をしていないので、独自の関数を作成する必要があります。

ここでコードを繰り返すこともできますが、既に何度も行われているので、カテゴリを追加して適切なエンコードを行う方法を示しているこのブログNSStringを参照してください。その後、コードを追加して途中で送信できます。類似のデコード関数を で書くことCFURLCreateStringByReplacingPercentEscapesUsingEncodingは、多くの例が浮かんでいる読者の練習になります。

ちなみに、URL の長さにはおそらく上限があり、ローカルでカスタム スキームを使用する場合でも、ペイロードが非常に小さいことを確認してください (数 kB のオーダー)。

于 2013-01-14T22:09:53.633 に答える