使用iOS客户端的Azure移动服务 - 如何在关闭应用程序时插入记录

时间:2013-08-03 16:33:58

标签: ios mobile azure service

我有一个iOS应用程序,可以定期将记录插入Azure Mobile Service数据库。当应用程序变为非活动状态时(即调用我的app委托的applicationWillResignActive方法时),我想插入一条记录来告诉我的AMS应用程序客户端会话已经结束。

当我尝试从applicationWillResignActive或applicationDidEnterBackground插入记录时,永远不会到达完成块。为了防止app委托方法在AMS插入完成之前返回,我尝试在检查我在插入完成块中设置的标志的同时调用usleep在循环中延迟100ms。

我怀疑当我处于这种状态时,AMS客户端库所需的运行循环或操作队列没有得到服务,但是AMS客户端库文档没有足够的细节来判断是否是这种情况。

这似乎是一种非常常见的情况 - 还有其他人遇到过这种情况吗?

1 个答案:

答案 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仍然可以在完成之前终止您的应用。