永远不要在google API for ios上传数据进度

aja*_*jay 7 iphone objective-c ipad ios google-drive-api

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

我按照Google示例上传文件.

我试图在上传时显示进度,具体取决于文件大小.我在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];
  }
}
Run Code Online (Sandbox Code Playgroud)

之后在MyViewController.m中写成这样的

 [self.driveService setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long numberOfBytesRead, unsigned long long dataLength) {
  NSLog(@"uploading");

}];
Run Code Online (Sandbox Code Playgroud)

以上NSLog永远不会因为这个而无法获得上传的数据字节.通过调试我遇到的uploadProgressBlock_总是显示为nil.可能是这个resone我的块处理程序没有被执行.

如果我有任何错误,请建议我.如果任何人有想法将数据的字节上传到谷歌驱动器的文件请建议我.您的建议对我的工作更有用.

提前致谢.

采取我们的人建议的综合答案:

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

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];
        }];
Run Code Online (Sandbox Code Playgroud)

快乐编码!!

小智 8

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

样品:

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
         }
Run Code Online (Sandbox Code Playgroud)