如何解决Objective C中成功回调的预期')'错误

Posted

技术标签:

【中文标题】如何解决Objective C中成功回调的预期\')\'错误【英文标题】:How to resolve Expected ')' error on a success callback in Objective C如何解决Objective C中成功回调的预期')'错误 【发布时间】:2019-08-01 09:40:34 【问题描述】:

我正在尝试将 Quickblox 聊天集成到现有的 Objective C (Xcode) 应用程序中。下面在另一个应用程序中工作的方法旨在将附件发送到聊天对话框。

dispatch_async(dispatch_get_main_queue(), ^

            [QBRequest TUploadFile:imageData
                          fileName:@"test.png"
                       contentType:@"image/png"
                          isPublic:NO
                      successBlock:^( QBResponse * _Nonnull response, QBCBlob * _Nonnull uploadedBlob )
                        

                          QBChatAttachment *attachment = [[QBChatAttachment alloc] init];

                          attachment.url = uploadedBlob.privateUrl ? uploadedBlob.privateUrl : uploadedBlob.publicUrl;

                          attachment.ID = uploadedBlob.UID;
                          attachment.name = uploadedBlob.name;
                          attachment.type = @"image";

                          if ([strongSelf.delegate respondsToSelector:@selector(attachmentBar:didUpLoadAttachment:)]) 
                              [strongSelf.delegate attachmentBar:strongSelf didUpLoadAttachment:attachment];
                          

                       statusBlock:^(QBRequest * _Nonnull request, QBRequestStatus * _Nonnull status) 

                          CGFloat progress = status.percentOfCompletion;
                          [strongSelf updateLoadingProgress:progress];

                       errorBlock:^(QBResponse * _Nonnull response) 
                          if ([strongSelf.delegate respondsToSelector:@selector(attachmentBarFailedUpLoadImage:)]) 
                              [strongSelf.delegate attachmentBarFailedUpLoadImage:strongSelf];
                          

                      ];
        );

但 succesBlock 回调一直抛出预期的 ')' 错误

successBlock:^( QBResponse * _Nonnull response, QBCBlob * _Nonnull uploadedBlob )

完整的错误如下图所示

我做错了什么。

【问题讨论】:

只是一个猜测,但可能是您错过了导入某些内容,因此编译器无法识别 QBResponse。 @Pankaj QBResponse 在 QuickBlox 框架的标头中被引用。一个命令点击链接到参考 我这么说,bcz已经有一个错误提示前向类对象,这清楚地表明你仍然需要导入一些东西。 @kplus -- 如果删除 _Nonnull 关键字会发生什么? @kplus - 您发布的图片似乎表明 successBlock: 行存在 3 个问题...也许 Expected ) 是由另一个错误引起的? 【参考方案1】:

预期的')'错误实际上是由@DonMag 和@Pankaj Gaikar 怀疑的另一个错误引起的。

错误是

"use of undeclared identifier QBRequest"

即使点击上述 QBRequest 的命令会获取指向 Quickblox.h 参考的链接,但我意识到 ChatAttachment 类并不是真正的 Quickblox.h。

所以解决方案是在 prefix.pch 文件中导入 Quickblox.h。

如果您的应用程序还没有 prefix.pch 文件,这里是创建 prefix.pch 文件的步骤。

    从 Xcode 菜单中,选择 File > New > File...

    ios 模板选项中,选择其他 > PCH 文件。

    将文件命名为 -Prefix.pch,然后选择“创建”。

    从目标的构建设置中,选择全部,然后将以下内容添加到前缀标题字段

    $(SRCROOT)/-Prefix.pch

我希望这对某人有所帮助。

【讨论】:

以上是关于如何解决Objective C中成功回调的预期')'错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Objective-C 中执行回调

从 Objective C 将回调/闭包转换为 Swift

在 Objective C 中连接音频缓冲区

从 Swift 调用 Objective C 和 C 传递回调函数

AudioUnit Render 回调中的 Objective-C/Swift 用法

来自实例方法的具有静态 void 的 Objective C Cordova 回调