首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASynchronous NSURLConnection inside NSOperation with NSInvocation?

ASynchronous NSURLConnection inside NSOperation with NSInvocation?
EN

Stack Overflow用户
提问于 2012-02-10 18:23:16
回答 3查看 1.4K关注 0票数 0

我不得不使用异步NSURLConnection内部的NSOPeration在后台模式,因为它的反应是有大的dataI必须避免苹果的有限长度编码在didEnterBackground.instead中使用它的我使用以下代码通过NSOperation与NSInvocation作为,但它不是working.connectToServer是有NSURLConnection operation.any帮助吗?

代码语言:javascript
运行
复制
 -(void)viewDidLoad
 {
 NSOperationQueue *queue = [NSOperationQueue new];

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
                                                                        selector:@selector(connectServer)
                                                                          object:nil];

[queue addOperation:operation];
[operation release];
[queue autorelease];

}

代码语言:javascript
运行
复制
 -(void)connectServer
{


NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
NSURLConnection *theConnection = [[[NSURLConnection alloc] initWithRequest:theRequest delegate:self] autorelease];

    if( theConnection )
    {
        webData = [[NSMutableData data] retain];
    }
    else
    {
        NSLog(@"theConnection is NULL");
    }
}

}

EN

回答 3

Stack Overflow用户

发布于 2012-02-15 09:13:52

嗯,也许你可以在一个块中为主队列做连接,如下所示:

代码语言:javascript
运行
复制
dispatch_async(dispatch_get_main_queue(), ^{

        NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0];
        _connection = [[NSURLConnection alloc] initWithRequest:request startImmediately:YES];
        [request release];
});

然后应该调用委托方法。

票数 2
EN

Stack Overflow用户

发布于 2012-02-10 19:13:10

每当您希望在辅助线程上运行NSURLConnection时,都需要将该连接添加到运行循环中

代码语言:javascript
运行
复制
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url 
                cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0];
    _connection = [[NSURLConnection alloc] initWithRequest:request delegate:self
                 startImmediately:YES];
    [request release];


[_connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[_connection start];

    [pool release];
票数 1
EN

Stack Overflow用户

发布于 2012-02-10 18:50:15

这一点我可能错了,但我还是会尝试。

医生说..。for start方法

start使连接开始加载数据(如果尚未加载数据)。

  • (空)开始讨论仅当您使用initWithRequest:delegate: startImmediately :方法创建连接并为startImmediately参数提供NO时,才需要调用此方法。如果在调用此方法之前没有在运行循环或操作队列中调度连接,则会在默认模式下在当前运行循环中调度连接。

因此,在我看来,您必须手动启动连接,因为它在操作队列中。如果我错了,请纠正我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9226215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档