0 objective-c nsurlconnection ios4 ios ios5
我[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)在我的应用程序中使用.通过使用这个我的应用程序在iOS 4.3中终止,但它在iOS 5.0中运行良好.
如何在iOS 4.3中使用它可以帮助我任何人.
这是一个适合我的完整实现.您可以随意重命名并添加为类别NSURLConnection,或者只是将其作为本地方法添加到您正在使用的类中.
-(void)sendAsynchronousRequest:(NSURLRequest*)request queue:(NSOperationQueue*)queue completionHandler:(void(^)(NSURLResponse *response, NSData *data, NSError *error))handler
{
__block NSURLResponse *response = nil;
__block NSError *error = nil;
__block NSData *data = nil;
// Wrap up synchronous request within a block operation
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
}];
// Set completion block
// EDIT: Set completion block, perform on main thread for safety
blockOperation.completionBlock = ^{
// Perform completion on main queue
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
handler(response, data, error);
}];
};
// (or execute completion block on background thread)
// blockOperation.completionBlock = ^{ handler(response, data, error); };
// Execute operation
[queue addOperation:blockOperation];
}
Run Code Online (Sandbox Code Playgroud)
编辑 我不得不修改方法,因为我在完成块中进行了UIKit调用(例如更新标签等).因此,在主线程上调用完成块实际上更安全一些.(原版注释掉)
| 归档时间: |
|
| 查看次数: |
5235 次 |
| 最近记录: |