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