Iphone 从未在google API for ios中获得上传数据进度

Iphone 从未在google API for ios中获得上传数据进度,iphone,ios,objective-c,ipad,google-drive-api,Iphone,Ios,Objective C,Ipad,Google Drive Api,我在应用程序中使用GoogleDrive API从应用程序上载文件。到目前为止,我成功地上传了所有类型的文件,并找到了很好的结果 我跟着上传文件 我试图在上传时显示进度,具体取决于文件大小。我已经在google给出的示例代码中浏览了很多类,但是没有多少结果 获取文件上载进度所遵循的步骤: 我在GTLServices.m中找到了以下方法 - (void)setUploadProgressBlock:(GTLServiceUploadProgressBlock)block { [uploadPr

我在应用程序中使用GoogleDrive API从应用程序上载文件。到目前为止,我成功地上传了所有类型的文件,并找到了很好的结果

我跟着上传文件

我试图在上传时显示进度,具体取决于文件大小。我已经在google给出的示例代码中浏览了很多类,但是没有多少结果

获取文件上载进度所遵循的步骤:

我在GTLServices.m中找到了以下方法

- (void)setUploadProgressBlock:(GTLServiceUploadProgressBlock)block {
  [uploadProgressBlock_ autorelease];
  uploadProgressBlock_ = [block copy];

  if (uploadProgressBlock_) {
    // As above, we need the fetcher to call us back when bytes are sent.
    SEL sentDataSel = @selector(objectFetcher:didSendBytes:totalBytesSent:totalBytesExpectedToSend:);
    [[self objectFetcher] setSentDataSelector:sentDataSel];
  }
}
然后在MyViewController.m中这样写

 [self.driveService setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long numberOfBytesRead, unsigned long long dataLength) {
  NSLog(@"uploading");
 
}];
    let serviceTicket = service.executeQuery(query, completionHandler:  { (ticket, insertedFile , error) -> Void in
        let myFile = insertedFile as? GTLDriveFile

        if error == nil {
            alert.title = "Image Uploaded"
            alert.message = "100%"
            if progressView != nil {
                progressView!.progress = 1
            }
        } else {
            print("An Error Occurred! \(error)")
            alert.title = "There was an error uploading"
        }
    })

    //update UI on progress
    serviceTicket.uploadProgressBlock = {(ticket, written, total) in
        if progressView != nil {
            let progressCalc: Float = (Float(written)/Float(total))
            alert.message = "\(progressCalc*100)%"
            progressView!.progress = progressCalc
        }
    }
以上NSLog从未得到原谅,因为我无法获得上传的数据字节。通过调试,我发现uploadProgressBlock总是显示为nil。这可能是我的块处理程序没有被执行的原因

如果我有什么错误,请告诉我。 如果有人想把字节数的数据上传到谷歌硬盘上作为一个文件,请建议我。你的建议对我的工作更有用

提前谢谢

通过采纳我们的员工建议来综合回答:

下面是获取上传进度信息的代码

GTLServiceTicket *uploadTicket= [self.driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,GTLDriveFile *updatedFile,NSError *error)
        {
            if (error == nil)
            {
                [self.delegate completedFileUploadingToGoogleDrive];
                NSError *fileDeletionError=nil;
                [[NSFileManager defaultManager] removeItemAtPath:absalutePath error:&fileDeletionError];
            } else
            {
                [self.delegate errorOccoredWhileUploadingToGoogleDrive:error];
            }
        }];
        
        [uploadTicket setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long totalBytesWritten, unsigned long long totalBytesExpectedToWrite) {
            [self.delegate uploadedFileInfoInKB:(float)totalBytesExpectedToWrite/1024 and:(float)totalBytesWritten/1024];
        }];

快乐编码

我怀疑这可能与项目中缺少可用的定义有关。如果是这样,那么我认为您需要定义如下方法,而不是使用
-setUploadProgressBlock:

        - (void)ticket:(GTLServiceTicket *)ticket
 hasDeliveredByteCount:(unsigned long long)numberOfBytesRead
      ofTotalByteCount:(unsigned long long)dataLength;
然后将其指定为要在代码中使用的回调,如:

 [self.driveService setUploadProgressSelector:@selector(ticket:hasDeliveredByteCount:ofTotalByteCount:)];

(在GTLService.h中搜索
uploadProgressSelector
;其中有一条注释可能会有所帮助。)

我已成功使用上载块回调。。。将其分配给从
executeQuery
方法获得的
GTLServiceTicket
对象

示例:

GTLServiceTicket *uploadTicket =  [self.driveService executeQuery:query  completionHandler:^(GTLServiceTicket *ticket,  GTLDriveFile *insertedFile, NSError *error) 
                                           { // completion 
                                           }];


        [uploadTicket setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long totalBytesWritten, unsigned long long totalBytesExpectedToWrite) 
         {
             // progress
         }

我最近使用了法比奥的答案,但在Swift 2.3中,它看起来是这样的

 [self.driveService setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long numberOfBytesRead, unsigned long long dataLength) {
  NSLog(@"uploading");
 
}];
    let serviceTicket = service.executeQuery(query, completionHandler:  { (ticket, insertedFile , error) -> Void in
        let myFile = insertedFile as? GTLDriveFile

        if error == nil {
            alert.title = "Image Uploaded"
            alert.message = "100%"
            if progressView != nil {
                progressView!.progress = 1
            }
        } else {
            print("An Error Occurred! \(error)")
            alert.title = "There was an error uploading"
        }
    })

    //update UI on progress
    serviceTicket.uploadProgressBlock = {(ticket, written, total) in
        if progressView != nil {
            let progressCalc: Float = (Float(written)/Float(total))
            alert.message = "\(progressCalc*100)%"
            progressView!.progress = progressCalc
        }
    }

上传时,它会更新ProgressView,完成后会更改UIAlertViewController的标题和消息,我已经完成了谷歌整合,我已经成功地将音频文件上传到谷歌。我需要在将音频文件上传到谷歌硬盘时显示进度条。如果你知道这个概念,建议我怎么做?@Ravindhiran请查看我编辑的问题,并给出答案代码。+1它工作正常,谢谢ajay。。。