Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标c列出来自google drive的文件_Ios_Objective C_Google Drive Api - Fatal编程技术网

Ios 目标c列出来自google drive的文件

Ios 目标c列出来自google drive的文件,ios,objective-c,google-drive-api,Ios,Objective C,Google Drive Api,我正在开发ios应用程序,包括谷歌硬盘。在GoogleDrive中,当我试图列出文件时,它会在单个页面中显示所有文件夹、子文件夹和子文件。这是我的密码 GTLQueryDrive *query = [GTLQueryDrive queryForFilesList]; [driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,

我正在开发ios应用程序,包括谷歌硬盘。在GoogleDrive中,当我试图列出文件时,它会在单个页面中显示所有文件夹、子文件夹和子文件。这是我的密码

GTLQueryDrive *query = [GTLQueryDrive queryForFilesList];

    [driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
                                                         GTLDriveFileList *filesList,
                                                         NSError *error) {
if (error == nil) {

            [FilesFromGoogleDrive addObjectsFromArray:filesList.items
             ];

        };

我不想在主页上列出所有文件。我需要类似于谷歌驱动器的应用程序访问文件夹,子文件夹,子文件的顺序方式。我尝试这从过去一个星期,但没有好的结果。所以,请帮助我如何访问文件夹、子文件夹

如果要列出由
folderId
标识的文件夹中的所有文件,可以使用以下代码(从):

另一个选项是搜索父集合中具有
folderId
的文件:

例如,您可以使用如下所示的搜索查询:

'1234567' in parents

其中“1234567”是您要为其列出文件的文件夹的id。

我希望这是您想要的。只需使用这段代码,这段代码将为您提供所需的信息

-(void)getFileListFromSpecifiedParentFolder {
        GTLQueryDrive *query2 = [GTLQueryDrive queryForChildrenListWithFolderId:<some_folder_id or root>];
        query2.maxResults = 1000;

        // queryTicket can be used to track the status of the request.
        [self.driveService executeQuery:query2
            completionHandler:^(GTLServiceTicket *ticket,
                            GTLDriveChildList *children, NSError *error) {
                NSLog(@"\nGoogle Drive: file count in the folder: %d", children.items.count);
                //incase there is no files under this folder then we can avoid the fetching process
                if (!children.items.count) {
                    return ;
                }

                if (error == nil) {
                    for (GTLDriveChildReference *child in children) {

                        GTLQuery *query = [GTLQueryDrive queryForFilesGetWithFileId:child.identifier];

                        // queryTicket can be used to track the status of the request.
                        [self.driveService executeQuery:query
                            completionHandler:^(GTLServiceTicket *ticket,
                                                GTLDriveFile *file,
                                                NSError *error) {

                                                NSLog(@"\nfile name = %@", file.originalFilename);
                                                }];
                    }
                }
            }];
    }
-(void)getFileListFromSpecifiedParentFolder{
GTLQueryDrive*query2=[GTLQueryDrive queryForChildrenListWithFolderId:];
query2.maxResults=1000;
//queryTicket可用于跟踪请求的状态。
[self.driveService executeQuery:查询2
completionHandler:^(GTLServiceTicket*票据,
GTLDriveChildList*子项,N错误*错误){
NSLog(@“\n日志驱动器:文件夹中的文件计数:%d”,children.items.count);
//如果此文件夹下没有文件,则可以避免获取过程
如果(!children.items.count){
返回;
}
如果(错误==nil){
用于(GTLDriveChildReference*儿童中的儿童){
GTLQuery*query=[GTLQueryDrive queryForFilesGetWithFileId:child.identifier];
//queryTicket可用于跟踪请求的状态。
[self.driveService executeQuery:查询
completionHandler:^(GTLServiceTicket*票据,
GTLDriveFile*文件,
N错误*错误){
NSLog(@“\n文件名=%@”,文件名为.originalFilename);
}];
}
}
}];
}
以下是我是如何做到的:

NSString* currentFolderID = @"root";//folder id for the Google Drive root directory
GTLQueryDrive *query = [GTLQueryDrive queryForFilesList];
NSString* queryQ = [NSString stringWithFormat: @"trashed = false and '%@' in parents", currentFolderID];
query.q  = queryQ;
[_googleService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
                                                                                GTLDriveFileList *files,
                                                                                NSError *error)
                   {
                       if (error == nil)
                       {
                            [self listFiles: files.items];
 }
使用@“root”作为父目录列出根目录中的文件,并使用子文件夹项的file.identifier作为父目录列出源目录中的文件。要查询子文件夹中的文件,请使用以下两行获取子文件夹中所有文件的父标识符

GTLDriveFile subFolderItem;
currentFolderID = subFolderItem.identifier;

要获取Google Drive的所有文件列表,请使用以下代码:

GTLQueryDrive *query = [GTLQueryDrive queryForFilesList];
query.q = [NSString stringWithFormat:@"'%@' IN parents", @"root"];

[self.serviceDrive executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
                                                          GTLDriveFileList *files,
                                                          NSError *error) {

    if (error == nil)
    {
        NSMutableArray * driveFiles = [[NSMutableArray alloc] init];
        [driveFiles addObjectsFromArray:files.items];

        for (GTLDriveFile *file in driveFiles)
            NSLog(@"File is %@", file.title);

    }
    else
    {
        NSLog(@"An error occurred: %@", error);
    }
}];

谢谢你的答复。。但在我的google驱动器帐户中,我有两个类似于驱动器-->NewFolder-->Newfolder1的文件夹,还有一个文件夹。当我执行列表查询时,它会在一个页面中检索所有文件夹,包括子文件夹。我需要在谷歌驱动器帐户中列出。这就是我需要做的。我们终于找到了获取主目录文件和文件夹的答案。为此,我们使用query.q=“'root'在父对象中”
GTLQueryDrive *query = [GTLQueryDrive queryForFilesList];
query.q = [NSString stringWithFormat:@"'%@' IN parents", @"root"];

[self.serviceDrive executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
                                                          GTLDriveFileList *files,
                                                          NSError *error) {

    if (error == nil)
    {
        NSMutableArray * driveFiles = [[NSMutableArray alloc] init];
        [driveFiles addObjectsFromArray:files.items];

        for (GTLDriveFile *file in driveFiles)
            NSLog(@"File is %@", file.title);

    }
    else
    {
        NSLog(@"An error occurred: %@", error);
    }
}];