首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么谷歌硬盘iOS应用程序接口停止在我的应用程序中运行?

为什么谷歌硬盘iOS应用程序接口停止在我的应用程序中运行?
EN

Stack Overflow用户
提问于 2015-01-11 07:17:36
回答 1查看 192关注 0票数 0

我已经弄明白了这个问题的答案,但我想我应该把问题和答案贴出来,因为我花了很长时间才弄明白。

我在我的应用程序中使用Google Drive iOS/Objective C API (参见https://developers.google.com/drive/ios/quickstart)已经有一段时间了。一切都进行得很顺利。在过去的几天里,我试图扩展我对它的使用,在我的新使用中,作为我正在做的事情的一部分,我希望Google API访问发生在后台,而不是阻碍UI。因此,我将调用分派给Google API,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
            // Call Google Drive
        });

结果好坏参半。我得到了部分结果。看起来,在我重新启动我的应用程序之前,它会一直工作,然后它就会停止。尽管我仍然拥有用户授权凭证。

EN

回答 1

Stack Overflow用户

发布于 2015-01-11 07:19:56

让漫长的调试过程变得简短(我尝试了我所做的每一件事),我最终将其范围缩小到线程问题。在主线程上运行Google API调用(这是我在最初使用Google API时所做的),事情就开始工作了。我在谷歌文档中发现:

通常,应用程序将在主线程上执行查询,查询完成处理程序将在主线程上回调。

或者,应用程序可以在后台线程上执行查询,并将在同一后台线程上被回调,尽管应用程序必须在该线程上运行NSRunLoop才能进行回调。

请参阅https://code.google.com/p/google-api-objectivec-client/wiki/Introduction

下面的文字也很重要:

从iOS 6和MacOSX10.7开始,查询可以在主线程或后台线程上执行,并在主线程或后台线程上回调。要使回调发生在与执行查询的线程不同的线程上,请为服务对象的delegateQueue属性指定一个NSOperationQueue (而不是调度队列)。

例如,通过使用主队列,可以在主线程上回调来自任何线程的查询:

service.delegateQueue = NSOperationQueue mainQueue;通过提供后台队列,可以在后台线程上回调来自任何线程的查询,如下例所示:

service.delegateQueue = [NSOperationQueue alloc ];指定委托队列时,不需要在执行查询的线程上运行运行循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27884875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文