0

我创建了一个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];
    });
4

1 回答 1

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];
});
于 2013-06-25T08:52:51.187 回答