1

私は を持っていNSURLConnectionますNSOperation。これNSOperationは にありNSOperationQueueます。だから、きれいなコードで失敗したNSOperation場合を思い出す方法を知りたかったのです。(例えばダウンロード中に失敗しNSURLConnectionた場合に言いたい)NSURLConnection

4

1 に答える 1

1

この多くの作業を行う既存のオープン ソース ライブラリがあります。AFネットワーキングです。

さらに、よく使用するクラスAFURLConnectionOperationは、それ自体が のサブクラスですNSOperation

AFURLConnectionOperationブロックを使用して、実行するコードを設定します。

- (void)setUploadProgressBlock:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))block;
- (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block;
- (void)setAuthenticationAgainstProtectionSpaceBlock:(BOOL (^)(NSURLConnection *connection, NSURLProtectionSpace *protectionSpace))block;
- (void)setAuthenticationChallengeBlock:(void (^)(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge))block;
- (void)setRedirectResponseBlock:(NSURLRequest * (^)(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse))block;
- (void)setCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLConnection *connection, NSCachedURLResponse *cachedResponse))block;

通常どおりに を追加するだけAFURLConnectionOperationです。NSOperationQueue

AFHTTPRequestOperationも非常に便利です。AFHTTPClientand で作成されNSMutableURLRequestます:

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://www.google.com"]];
NSMutableURLRequest *request = [client requestWithMethod:@"GET" path:nil parameters:nil];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:request];

成功または失敗は簡単で、古い学校のデリゲート コールバックではなく、新しいトレンディなブロックで処理されます。

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation * request, id response)
 {
        // ... my success block
 }
 failure:^(AFHTTPRequestOperation *request, NSError *error)
 {
    // ... my failure block
 }];
于 2012-09-12T14:17:43.120 に答える