我有一个iOS应用程序,可以定期将记录插入Azure Mobile Service数据库。当应用程序变为非活动状态时(即调用我的app委托的applicationWillResignActive方法时),我想插入一条记录来告诉我的AMS应用程序客户端会话已经结束。
当我尝试从applicationWillResignActive或applicationDidEnterBackground插入记录时,永远不会到达完成块。为了防止app委托方法在AMS插入完成之前返回,我尝试在检查我在插入完成块中设置的标志的同时调用usleep在循环中延迟100ms。
我怀疑当我处于这种状态时,AMS客户端库所需的运行循环或操作队列没有得到服务,但是AMS客户端库文档没有足够的细节来判断是否是这种情况。
这似乎是一种非常常见的情况 - 还有其他人遇到过这种情况吗?
答案 0 :(得分:0)
我非常肯定iOS发送来自applicationWillResignActive的网络请求是不受欢迎的。此方法用于清理事务,而不是使用其他资源。但是,您可以请求iOS让您的应用在后台运行一段时间。你应该可以这样做:
UIBackgroundTaskIdentifier taskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
//Perform call to mobile service
myservice.dosomething(Completion:^{
//Call to mobile service is done
[[UIApplication sharedApplication] endBackgroundTask:taskID];
});
}];
这应该使您能够拨打电话然后获得回复。请记住,如果选择此选项,iOS仍然可以在完成之前终止您的应用。