2016-07-29 25 views
1

アプリから電話をかける必要があります。番号は、電話番号とハッシュタグに続くパスコードの2つの数字で構成されます。 しかし、一部のユーザーは、番号の末尾に二重のハッシュタグを配置する必要があり、それが一度にそのURLを呼び出しているときには、アプリケーションをクラッシュ:それは働いて、単一のハッシュタグ付きopenURL()のダブルハッシュタグでアプリがクラッシュする

UIApplication.sharedApplication().openURL(NSURL (string: "tel//:1111111,,222##")) 

、上のハッシュタグを押すことが可能ですデバイスの後のキーボードはすでにダイヤルしています。私はASCIIテーブルを追加しようとしました - 16進数、23(意味する) - それは役に立たなかった。

EDIT:

スワップにこのようなハッシュタグ行い
let encodedHost = 
numberToDial.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet()) 

enter image description here

しかし、この番号に電話しようとしている私が何かhereを見つけた

(NSURL) - アプリはまだクラッシュします。どうすればURLの最後に二重のハッシュタグを作成し、アプリをクラッシュさせることはできますか?

答えて

1

問題は、NSURLが有効なURLではないと思うことです。これは:

NSURL(string: "tel//:1111111,,222##") 

... nilを返します。問題は逃げることではありません。それはNSURLが明らかに2つの#シンボルを持つものを受け入れないことです。 (自分で試すためにそれを遊び場に貼り付けてください)looks like it ought toだから、アップルにバグとして報告するかもしれません。しかし、this from Appleの点に注意してください。

は、悪意を持って電話をリダイレクトするか、電話またはアカウントの動作を変更することからユーザーを防ぐために、携帯電話のアプリはほとんどサポートし、すべてではないが、TEL方式での特殊文字の。具体的には、URLに*または#文字が含まれている場合、Phoneアプリケーションは対応する電話番号にダイヤルしようとしません。


このコードはコンパイルなぜ私にはわからない:

UIApplication.sharedApplication().openURL(NSURL(string: "tel//:1111111,,222##")) 

NSURL(string:)それは、オプションを返し、openURL()の引数は、非オプションである意味、failable初期化子です。それはクラッシュを防止するであろう。このようなチェックを行うためにあなたを頭出し:

あなたはおそらくあなたがこの質問のためにそれをトリミングしたときに落としてしまったNSURLコンストラクタの後!を持っていましたか?もしそうなら、それがあなたのクラッシュの原因になります。

+0

私の場合は正しくあります。 let nsurr = NSURL(string: "\(self.callOptions.devicephoneURL )\(numberToDial) ")!しかし、私は "!"を取り除くことはできません –

+0

更新する前に表示するように私のコードを更新しました。この方法で、少なくともアプリケーションのクラッシュを避けることができます。しかし、2つのハッシュタグを許可するにはどうすればよいですか? (これの利点:番号の末尾にダブルハッシュタグを置くとイントロ音声をスキップします) –

+0

できません。上に貼り付けたドキュメントリンクを読んでください。 (私はOlegも答えを貼り付けているのを見ています)。セキュリティ上の理由から、Apple **は '' tel: 'URL **の'# 'を完全にサポートしていません。なぜあなたが '!'を必要としたのか、私のコードがそれを修正した理由は、これを見てください:http://stackoverflow.com/questions/24018327/what-does-an-exclamation-mark-mean-in-the-swift-言語/ 33399973#33399973 –

2

私はあなたの質問に対する答えはドキュメントにあると思います。悪意を持って電話をリダイレクトするか、電話またはアカウントの 動作を変更できないように

、電話アプリはTEL方式での特殊文字の、ほとんどが、 なく、すべてをサポートしています。具体的には、URLに に*または#文字が含まれている場合、電話アプリは に対応する電話番号をダイヤルしようとしません。あなたのアプリがユーザーからのURL 文字列または不明な情報源を受け取った場合は、 に、URLに適切でない可能性のある特殊文字が正しく入力されていることを確認する必要があります。 。ネイティブアプリの場合、NSStringの stringByAddingPercentEscapesUsingEncoding:メソッドを エスケープ文字に使用してください。これにより、元の文字列の が適切にエスケープされたバージョンが返されます。

特に方法stringByAddingPercentEscapesUsingEncodingこのメソッドをダイヤルしたい文字列で使用してみます。

+0

これはiOS9以降非推奨ですが、このようにstringByAddingPercentEncodingWithAllowedCharactersを試しました。 let address = "#"; let escapedAddress = address.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()); trimmedText + = NSString(形式: "\(escapedAddress)")を文字列として返します。 ハッシュタグの代わりに、ハッシュタグの代わりに "2"が必要です。 –

関連する問題