NSURLConnection委托方法在Simulator中调用,但不在Device中调用

时间:2013-06-01 10:19:14

标签: iphone ios development-environment

我创建了一个NSObject,它从php Web服务下载了一些数据。问题是,当我在模拟器中运行应用程序运行良好,但在设备中不调用委托方法。我不知道为什么。我编写了所有委托方法,但没有一个被调用。这是NSObject代码的一部分:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:hostStr]];
 NSLog(@"%@ URL Engine",hostStr);
 dispatch_async(dispatch_get_main_queue(), ^{
 _connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];

       // while(!finished) {
         //   [[NSRunLoop currentRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate distantFuture]];
        //}
        [_connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
        [_connection start];
    });

1 个答案:

答案 0 :(得分:0)

调用dispatch_async来获取主线程队列上的连接是很棘手的。

如果要在主线程上调用代理,请尝试此操作:

 [self performSelectorOnMainThread:@selector(startConnection) 
                        withObject:Nil 
                     waitUntilDone:NO];

如果你想让你的代表在另一个线程上被调用,请尝试:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop];
    [connection scheduleInRunLoop:currentRunLoop forMode:NSRunLoopCommonModes];
    [connection start];
    [currentRunLoop run];
});