5

への入力dictionary(fromTXTRecord:)は、ネットワーク、場合によってはアプリの外部、またはデバイスからのものです。ただし、Apple のドキュメントには次のように記載されています。

... txtData が NSDictionary オブジェクトとして表現できない場合、アサーションは失敗します。

アサーションに失敗すると、プログラマー (私) はエラーを処理する方法がなくなります。これは、外部データを処理するメソッドにとって非論理的なようです。

これを Mac のターミナルで実行すると、次のようになります。

dns-sd -R 'My Service Name' _myservice._tcp local 4567 asdf asdf

iPhone で実行しているアプリがクラッシュします。

dictionary(fromTXTRecord:)は、TXT レコード データ ( asdf asdf) がkey=valフォーム内にあることを期待しています。上記のように、単語に何も含まれていない場合=、メソッドはそれを解析できず、アサーションに失敗します。

その方法をまったく使用せず、自分自身の解析を実装する以外に、この問題を解決する方法はありません。これは間違っていると感じています。

何か不足していますか?

4

3 に答える 3

1

Swift 3を使用してこれに遭遇しました。私の場合、問題は使用したときにのみ発生しましたNetService.dictionary(fromTXTRecord:)が、Objective-Cに切り替えて呼び出したときには発生しませんでしたNSNetService dictionaryFromTXTRecord:。Objective-C の呼び出しで等号のないエントリが検出されると、データを含むキーが作成され、NSNull値と共にディクショナリに押し込まれます。私が知る限り、Swift バージョンはその辞書を列挙し、NSNull. 私の解決策は、Objective-C ファイルとdictionaryFromTXTRecord:、結果を呼び出してクリーンアップしてから Swift コードに返すユーティリティ関数を追加することでした。

于 2016-12-29T01:17:34.090 に答える