Iphone 从未在google API for ios中获得上传数据进度
我在应用程序中使用GoogleDrive API从应用程序上载文件。到目前为止,我成功地上传了所有类型的文件,并找到了很好的结果 我跟着上传文件 我试图在上传时显示进度,具体取决于文件大小。我已经在google给出的示例代码中浏览了很多类,但是没有多少结果 获取文件上载进度所遵循的步骤: 我在GTLServices.m中找到了以下方法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
- (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。。。