2011-01-25 12 views
2

私は、textFieldと呼ばれるUITextFieldとWebViewという名前のUIWebViewであるアドレスバーを持っています。フォローコードが動作するほとんどの時間:[NSURL URLWithString:stringContainingSpecialCharacters]

[webView loadURL:[NSURL URLWithString:textField.text]]; 

私は特殊文字をいくつかの長い文字列に入れて、URLWithString:は単にnullを返します。可読性のブックマークレットが良い例です。

javascript:(function(){readConvertLinksToFootnotes=true;readStyle='style-newspaper';readSize='size-medium';readMargin='margin-wide';_readability_script=document.createElement('script');_readability_script.type='text/javascript';_readability_script.src='http://lab.arc90.com/experiments/readability/js/readability.js?x='+(Math.random());document.documentElement.appendChild(_readability_script);_readability_css=document.createElement('link');_readability_css.rel='stylesheet';_readability_css.href='http://lab.arc90.com/experiments/readability/css/readability.css';_readability_css.type='text/css';_readability_css.media='all';document.documentElement.appendChild(_readability_css);_readability_print_css=document.createElement('link');_readability_print_css.rel='stylesheet';_readability_print_css.href='http://lab.arc90.com/experiments/readability/css/readability-print.css';_readability_print_css.media='print';_readability_print_css.type='text/css';document.getElementsByTagName('head')[0].appendChild(_readability_print_css);})(); 

this answerによると、私は、文字列をエスケープするstringByAddingPercentEscapesUsingEncodingを使用することができ、実際には、このような場合のために正常に動作します。

私の質問は文字列をwebViewに渡す前に必ずstringByAddingPercentEscapesUsingEncoding:と呼んでも安全ですか?次のことには何らかの影響がありますか?

[webView loadURL:[NSURL URLWithString:[textField.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]] 

ありがとうございます!

EDIT:「安全」という意味は、これがUnicode文字を含むURLで動作するのに対し、「通常の」URLで正常に動作するかどうかです。

EDIT 2:これが「安全」である場合、それがデフォルトの動作ではないのはなぜですか?

答えて

5

私の質問に対する他の回答がありませんので、私は安全対策として、代わりに- (NSURL *)URLWithString:の次- (NSURL *)URLValueの方法を使用することにしました:

- (NSURL *)URLValue { 
    NSURL *URL = [NSURL URLWithString:self]; 

    if (URL) return URL; 

    return [NSURL URLWithString:[self stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
} 
+0

あなたは 'NSString * str = @" http://example.com/日本語; 'を持っていて、' [NSURL URLWithString:] 'が' nil'を返すので正しい方法を見つけました。 example.com /%E6%97%A5%E6%9C%AC%E8%AA%9E'を返すと、[NSURL URLWithString:[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] – nacho4d

0

問題はありません。返されるすべてのオブジェクトはオートリリースされるため、リークは発生しません。

+0

感謝。私はメモリ管理の面について心配していません - 私が意味することは、「安全」というのは、これがUnicode文字を含むURLで動作するのに対し、通常のURLでうまく動作することですか? –

+0

はい、もちろんです。 – Max

+1

それはなぜそれがデフォルトの動作ではないのですか? –