1

GCDWebServer を使用して、iPhone からローカル ネットワーク上の他のデバイスに写真を共有しています。

自分のブロック内で GCDWebServerCompletionBlock を呼び出そうとしていますが、ログなしでアプリがクラッシュしますが、GCDWebServerConnection で「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 を呼び出す方法は?

4

2 に答える 2

0

同期ハンドラーを使用しているため、関数が返されたときに応答を返す必要があります。そうしないことはプログラマーのエラーであり、アプリが異常終了するのはそのためです。

後で応答を返すことができる非同期ハンドラーが必要なようです。詳細と例については、GCDWebServer の「非同期 HTTP 応答」セクションを参照してくださいREADME

于 2016-10-29T15:56:32.353 に答える