私は を持っていNSURLConnection
ますNSOperation
。これNSOperation
は にありNSOperationQueue
ます。だから、きれいなコードで失敗したNSOperation
場合を思い出す方法を知りたかったのです。(例えばダウンロード中に失敗しNSURLConnection
た場合に言いたい)NSURLConnection
質問する
417 次
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
も非常に便利です。AFHTTPClient
and で作成され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 に答える