GCDWebServer响应与completionBlock从另一个块调用



我使用GCDWebServer在本地网络上分享iPhone上的图片。

我试图调用GCDWebServerCompletionBlock在我自己的块,但我的应用程序崩溃没有任何日志,但"信号SIGABRT"在GCDWebServerConnection:

GWS_DCHECK(_responseMessage == NULL);

但是,如果我直接在块外返回响应,则一切正常。

下面是我的代码:
    -(void)handleMediaRequest:(GCDWebServerRequest *)request completion:(GCDWebServerCompletionBlock)completionBlock {
//...
URLParser *parser = [[URLParser alloc] initWithURLString:url];
      NSString *photoId = [parser valueForVariable:@"id"];
      [[PhotoLibraryManager photoLibraryManager] getPhotoWithId:photoId completionBlock:^(UIImage *image) {
        NSData *data = UIImageJPEGRepresentation(image, 0.70);
        completionBlock([GCDWebServerDataResponse responseWithData:data contentType:@"application/octet-stream"]);
      } failureBlock:^(NSError *error) {
        completionBlock([GCDWebServerDataResponse responseWithStatusCode:404]);
      }];
}

如何在我自己的块内调用GCDWebServerCompletionBlock ?

您正在使用同步处理程序,因此当函数返回时必须从它返回响应。不这样做是程序员的错误,这就是为什么你的应用程序中止。

看起来您想要的是一个异步处理程序,它允许您在稍后的时间返回响应。查看GCDWebServer README的"异步HTTP响应"小节了解更多信息和示例。

崩溃发生,因为你正在构建GCDWebServer在调试模式,它报告内部不一致。您很可能调用completionBlock()不止一次,这是不允许的。对于每个请求的每个响应,它必须被调用一次,并且只调用一次。

相关内容

  • 没有找到相关文章

最新更新