5

要するに、[NSURL URLWithString:]例外を発生させているようです。ドキュメントによると、「文字列の形式が正しくない場合、nil が返されます。」どのような状況でも例外が発生するという言及はありません。これに加えてnil、文字列を URL に変換する前に、URL のエンコードとチェックの両方を行っています。

URL を変換する前に、それがどの例外であるか、または他にどのようなエラー チェックを行う必要があるかについて、誰かアドバイスをいただけますか?

詳細に興味がある場合は、呼び出しコードは次のようになります。

NSString* tmpText = [newUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
if (tmpText == nil) {
    // error handling
}
else {
    NSURL* tmpURL = [NSURL URLWithString:tmpText];

これは、iTunes Connect からダウンロードしたクラッシュ レポートの一部です。

8   libobjc.A.dylib                 0x300c1f84 objc_exception_throw
9   CoreFoundation                  0x3029a598 +[NSException raise:format:arguments:]
10  CoreFoundation                  0x3029a538 +[NSException raise:format:]
11  Foundation                      0x30696dde -[NSURL initWithString:relativeToURL:]
12  Foundation                      0x30696cd8 +[NSURL URLWithString:relativeToURL:]
13  Foundation                      0x30696cae +[NSURL URLWithString:]
14  Yummy                           0x000146ca -[DeliciousPostCell setUrl:] + 46

URL の形式が「不適切」だったようですが、実際にnilは例外ではありません。

自分で例外が発生するのを見たことがないので、XCode を使用してコードをトラップし、何が起こっているのかを確認することはできません。また、問題が発生したユーザーから直接連絡がなかったので、詳細を尋ねることはできません。どんな提案でも大歓迎です。

更新 (2009 年 14 月 7 日) : このようなハックのように見えますが、疑わしい行の周りに例外ブロックを追加しました。また、レーダー バグ レポート (#7031551) を提出し、コードがドキュメントと一致する必要があることを示唆しました。

4

5 に答える 5

2

APIがドキュメントに従ってはならない例外をスローする場合があります。私の提案は、(実際のコードで)tmpTextが実際にnilではないことを確認することです(この場合、NSStringを期待するほとんどのAPIはnilで保存されないため、例外がスローされます)。その後、例外処理を追加し、bugreporter.apple.comにバグレポートを提出します。

于 2009-05-17T19:02:25.603 に答える
1

文字列tmpText、、は何らかの形で不正である必要があります(つまり、文字列に関する何かがRFC 2396に準拠していません)。残念ながら、その変数の正確な内容をユーザーから取得することはできないため、なぜそれが不正な形式であるのかを理解するのを手伝うことはできません。同様の動作について提出されたレポートについては、AppleのOpenRadarに関するこの投稿を参照してください。nilレポートがに渡されることについては知っていますが、他の不正な形式の文字列と同じようURLWithStringに扱われている場合、動作(例外をスローする)は同じである可能性があります。nil

作成方法newUrlを確認し、許可されていない文字がそこに侵入している可能性があるエッジケースを見つけることができるかどうかを確認することをお勧めします。私の推測では、そこにあなたの問題があります。

于 2009-05-17T19:03:19.160 に答える
0

NSURL は不正な URL に対しては nil を返し、文字列を NSLog に記録し、ブレークポイントを設定して、NSURL 作成メソッドに何が渡されているかを正確に確認します。URLWithString がハードコードされた値で機能する場合、それは渡されたものが不正であることをさらに証明しています。stringByAddingPercentEscapesUsingEncoding およびその他の文字列メソッドには注意してください。NSURL 受信者が窒息する可能性のある追加のがらくたを追加する可能性があるためです。

于 2010-03-15T19:16:35.507 に答える