NSURLConnection sendAsynchronousRequest:queue:completionHandler在iOS 4.3中不起作用

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中使用它可以帮助我任何人.

Jos*_*rey 6

这是一个适合我的完整实现.您可以随意重命名并添加为类别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调用(例如更新标签等).因此,在主线程上调用完成块实际上更安全一些.(原版注释掉)