3

Google Drive SDK for iOS を使用してフォルダを作成しようとしています。ここのGoogleドライブのドキュメントから:

https://developers.google.com/drive/folder

フォルダを作成することは、特別な MIME タイプで「ファイル」を作成するのと同じだと言っています。

GTLUploadParameters *uploadParameters = nil;

self.driveFile = [GTLDriveFile object];
self.driveFile.title = foldername;

uploadParameters = [GTLUploadParameters new];
uploadParameters.MIMEType = @"application/vnd.google-apps.folder";

GTLQueryDrive *query = nil;
query = [GTLQueryDrive queryForFilesInsertWithObject:self.driveFile
                                    uploadParameters:uploadParameters];


[self.driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
                                                          GTLDriveFile *updatedFile,
                                                          NSError *error) {

しかし、クエリを実行すると、次のようになります。

「NSInternalInconsistencyException」、理由:「アップロード データと fileHandle は相互に排他的です」

これは、定義済みの GTLUploadParameters ファクトリ メソッドのいずれかを使用する必要があることを示唆しています。

+ (GTLUploadParameters *)uploadParametersWithData:(NSData *)data
                                         MIMEType:(NSString *)mimeType;

+ (GTLUploadParameters *)uploadParametersWithFileHandle:(NSFileHandle *)fileHandle
                                               MIMEType:(NSString *)mimeType;

しかし、これらはどちらも適切ではありません (または、私が試したように機能します)。iOS で Google ドライブを使用してフォルダを正常に作成した人はいますか?

4

2 に答える 2

6

I do this:

    GTLDriveFile *folderObj = [GTLDriveFile object];
    folderObj.title = folderName;
    folderObj.mimeType = @"application/vnd.google-apps.folder";

    // To create a folder in a specific parent folder, specify the identifier
    // of the parent:
    // _resourceId is the identifier from the parent folder
    if (_resourceId.length && ![_resourceId isEqualToString:@"0"]) {
        GTLDriveParentReference *parentRef = [GTLDriveParentReference object];
        parentRef.identifier = _resourceId;
        folderObj.parents = [NSArray arrayWithObject:parentRef];
    }

    GTLQueryDrive *query = [GTLQueryDrive queryForFilesInsertWithObject:folderObj uploadParameters:nil];

    // executeQuery:...
于 2012-12-03T23:27:10.763 に答える
0

別のより完全なバリアントを次に示します。

+ (void)createFolderWithService:(GTLServiceDrive *)service
                     folderName:(NSString *)folderName
                       parentId:(NSString *)parentId
                completionBlock:(void (^)(GTLServiceTicket *, GTLDriveFile *, NSError *))completionBlock {
  GTLDriveFile *folderObj = [GTLDriveFile object];
  folderObj.title = folderName;
  folderObj.mimeType = @"application/vnd.google-apps.folder";

  if (parentId.length && ![parentId isEqualToString:@"0"]) {
    GTLDriveParentReference *parentRef = [GTLDriveParentReference object];
    parentRef.identifier = parentId;
    folderObj.parents = [NSArray arrayWithObject:parentRef];
  }

  GTLQueryDrive *query = [GTLQueryDrive queryForFilesInsertWithObject:folderObj uploadParameters:nil];
  [service executeQuery:query completionHandler:completionBlock];
}
于 2016-01-11T03:53:07.647 に答える