我正在使用GCDWebServer将我的iPhone上的图片分享到本地网络上的其他设备。
我正在尝试在我自己的块中调用GCDWebServerCompletionBlock,但是我的应用程序在没有任何日志的情况下崩溃,但在GCDWebServerConnection上发出“signal SIGABRT”:
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?
答案 0 :(得分:0)
您正在使用同步处理程序,因此您必须在函数返回时从其返回响应。不这样做是程序员错误,这就是你的应用程序中止的原因。
看起来你想要的是一个异步处理程序,它允许你以后返回响应。有关更多信息和示例,请参阅GCDWebServer README
的“异步HTTP响应”部分。
答案 1 :(得分:0)
发生崩溃是因为您在调试模式下构建GCDWebServer,并且报告了内部不一致。您很可能多次呼叫completionBlock()
,这是不允许的。每个请求的每个响应都必须调用一次,并且只能调用一次。