GCDWebServer主线程& UI

时间:2013-11-08 10:51:46

标签: iphone objective-c multithreading http

我使用GCDWebServer创建一个简单的服务器,用户可以从文档中下载文件,从我显示UIAlertView的按钮,其中有iphone的IP地址,然后单击我为服务器加注星标,问题出现在服务器UI被阻止,uialertview不会被解雇。

这是我的代码

    if (alertView.tag == 999) {

    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentPaths objectAtIndex:0];

    self.webServer = [[GCDWebServer alloc] init];
    [self.webServer addHandlerForBasePath:@"/" localPath:documentsDir indexFilename:nil cacheAge:3600];
    [self.webServer runWithPort:8080];

    // I try this 2 solution but no one work
    //[self starsServer]
    //[self performSelector:@selector(startServer) onThread:[NSThread mainThread]  withObject:nil waitUntilDone:NO];
}

- (void) startServer {

[self.webServer start];

}

错误在哪里?

1 个答案:

答案 0 :(得分:3)

不要使用-runWithPort:因为它会阻止线程。此方法仅应在Mac命令行工具上使用。

创建服务器后,只需致电-start即可。这不会阻止当前线程,但会在后台启动服务器。然后你可以使用Xcode调试器找出挂起UI后发生的事情(很可能正在执行的当前函数没有返回)。