翻訳したまま放置していましたが、以下のエントリからの続き。
個人的なメモにも近いものになると思います。
◆ AFNetworking 3.xへの対応
http://qiita.com/Takumi_Mori/items/4353f1d40b8d92b74a2c
この記事の対象になる人
AFHTTPRequestOperationManager
のサブクラスを独自に作っていて、
今回のAFNetworking3.xによるNSOperationQueue
の削除によって書き換えが必要になった人
つまり、私です。
また、いまだにiOS6以前をサポートしないといけない方はそもそもNSURLSession
が使えないので対象外です。
AFHTTPSessionManagerを利用する
以下のように書き換えていきます。
-
AFHTTPRequestOperationManager
を継承していた箇所を、AFHTTPSessionManager
に変更する -
(AFHTTPRequestOperation *)
を戻り値にしている箇所は、(NSURLSessionDataTask *)
が返ります。 -
HTTPRequestOperationWithRequest:success:failure:
はdataTaskWithRequest:completionHandler
に変更します。
ResponseSerializerを指定していた場合
.responseSerializer
に対してsetAcceptableContentTypes
ができなくなっています。
以下のように、一度ResponseSerializerを作成して設定します。
id responseSerializer = [AFJSONResponseSerializer serializer];
[responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"text/html", @"application/json", nil]];
self.sessionManager.responseSerializer = responseSerializer;
終わり
まだいろいろと検証中ではありますが、意外とこの程度の変更で普通に動作しています。
あと、地味にNSURLSessionUploadTask
のprogressが、(NSProgress * __autoreleasing *)progress
から(void (^)(NSProgress *uploadProgress)) uploadProgressBlock
という形でblocksを渡す形に変更されてしまってるのも注意しないといけませんね。