アプリケーションで 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");
}];
上記の NSLog は、アップロードされたデータ バイトを取得できないため、決して許されません。デバッグすると、uploadProgressBlock_が常に nil と表示されます。これは、私のブロック ハンドラが実行されないことに起因する可能性があります。
私がそれを解決するために間違いを犯した場合は、私に提案してください。ファイルのGoogleドライブにアップロードされたデータのバイトを取得するアイデアがある場合は、私に提案してください。あなたの提案は私の仕事にとってより有益です。
前もって感謝します。
私たちの人々の提案を取り入れて統合された回答:
アップロードの進行状況情報を取得するコードは次のとおりです
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];
}];
ハッピーコーディング!!