项目从AFN 2.0 迁移到 3.0,因为代码历史问题,需要通过NSURLSessionTask 获取到responseString,可是通过category 无法添加属性以及方法
由于category 中需要用到reposne 中的数据,所以也无法直接给 NSObject 添加category,各位大大,是否有好的解决方案
PHP中文网2017-04-18 09:08:28
NSURLSessionTask は確かにカテゴリを追加できません。これは「継承できない」問題と似ています。一般に、この種の問題が発生した場合、それがビジネスに使用できるかどうかを確認するためのいくつかのアイデアがあります。
組み合わせは継承を置き換え、タスクである属性を持つ NSURLSessionTaskWrapper を定義します。タスクを使用する部分に wrapper.task
を直接使用することも、必要な他の属性やメソッドを追加することもできます。それを渡すメソッドを作成します。たとえば、
もちろん、自分のコードを制御することはできます wrapper.task
が、システムのコードを制御することはできないため、ビジネスに使用できるかどうかはわかりません。
ランタイムを使用して属性とメソッドを追加します。これにより、「システムのコードを制御できない」という上記の問題を解決できます。ランタイムを使用してコードを変更すると、このクラスはシステムから見てこれらの属性とメソッドを持つようになります。ただし、ランタイムが機能するかどうかはわかりません。
外部ストレージ。 sessionTask に一意の ID として使用するのに適した属性があるかどうかを確認し、SessionTaskManager クラスを作成します。新しく追加された属性について、マネージャーは ID を持つディクショナリを保存できます。 sessionTask をキーとして指定します。具体的には、属性は値であり、必要に応じて ID に基づいてアクセスされます。
上記は一般的に使用されるいくつかのアイデアです。あなたのビジネスに適用できるかどうかを確認してください~
ringa_lee2017-04-18 09:08:28
2016年6月3日 21:29:15更新
リーリー リーリーhttp://stackoverflow.com/a/35359533 で述べた理由により、
に拡張機能を追加しました。NSObject
クラス何らかの理由により、ファイルにカテゴリを 1 つだけ追加しないでください。詳しい理由は https://developer.apple.com/library/mac/qa/qa1490/_index.html でご覧いただけます。
質問者は、上記のコードが要件を達成できるかどうかを確認できます。