0

我能够接收任务,但在每次运行中,任务列表的顺序会有所不同。我需要在每次运行中具有相同顺序的任务列表。

我现在的取法是,

GTLServiceTasks *service = self.taskService;
query = [GTLQueryTasks queryForTasklistsList];
self.taskListsTicket = [service executeQuery:query
    completionHandler:^(GTLServiceTicket *ticket,
    id taskLists, NSError *error) {

    //i get the count of Tasklists here

    GTLTasksTaskList *itemtemp;
        for (int k=0; k<count_of_tasklists; k++) {
            NSMutableArray *alist = [[NSMutableArray alloc] init];

            //i get the id and titles of the tasklists here

            GTLServiceTasks *service2 = self.taskService;
            query2 = [GTLQueryTasks queryForTasksListWithTasklist:itemtemp.identifier];
            self.taskListsTicket = [service2 executeQuery:query2
                completionHandler:^(GTLServiceTicket *ticket2,
                id taskLists2, NSError *error2) {
                    self.taskLists = taskLists2;
                    for (int j=0; j<[self.taskLists.items count]; j++) {

                        //i get tasks for each tasklist here and store each one of
                        //the tasklists as a nsmutablearray

                    }
                    [tasks addObject:alist];

                    //i add each tasklist array to the master array
                    // then call reload method of the uitableview here

                }];
        }
}];

在我展示任务的 uitableview 中,我使用部分标题作为任务列表标题和行作为任务标题。在每次运行中,正确的任务都显示在正确的部分下。

我的问题是任务列表的顺序(部分的顺序)在每次运行中都不同,无论是在我的 uitableview 和 GTL 回复的控制台日志中。我认为 for 循环无需等待 Google Api 调用的结果即可工作。关于这个问题的任何想法?

提前感谢

4

1 回答 1

0

executeQuery:异步执行其块;不能保证返回结果的顺序与发出查询的顺序相同。

executeQuery:可以将这些查询组合成一个批次,而不是分别调用以获取每个任务列表的任务。批量查询结果将与批量查询的顺序相同。

将结果存储在由任务列表标识符作为键的字典而不是数组中也是合理的。之后可以按特定顺序迭代字典结果,例如使用objectsForKeys:notFoundMarker:任务列表标识符数组作为键。

于 2013-07-21T21:32:27.480 回答