整个应用程序的运行方法 - IOS

时间:2016-08-22 17:33:35

标签: ios background-process

我有一个方法可以将一组图像保存到我的数据库中。这发生在后台,因此用户可能会弹出导航控制器,从而保留多个未保存的图像。

 - (void) sendToCloud{
    sending = true;
    if (cloudQueue.count != 0) {
        [[cloudQueue firstObject] saveInBackgroundWithBlock:^(BOOL succeeded, NSError * _Nullable error) {
             if (succeeded) {
                [cloudQueue removeObjectAtIndex:0];
                [self sendToCloud];
            }else{
                [self sendToCloud];
            }
        }];
    }else{
        sending = false;
    }
}

我是否应该向NavigationController发送通知以运行此方法,以便无论用户去哪里,该方法都会继续运行?如何保持此方法的运行?

1 个答案:

答案 0 :(得分:1)

你可以通过很多方式丢失这些图像。该应用程序可能会被杀死。无论你做什么,他们都会离开。

一种好方法是将所有图像保存到Core Data模型中,以便将它们保存在磁盘上。然后创建一个协调后台上传的模型控制器。模型控制器不属于任何视图控制器,直到它们全部被发送为止。它可以在云中一旦删除图像(如果愿意,可以删除)。

这样,当应用程序启动时,您还可以检查是否有未发送的图像。模型控制器只进行上传。

这种方法的好处是图像不会丢失,并且容忍网络连接不良(图像保留在模型中,直到可以发送)。

如果您真的不想使用Core Data,那么您可以自己将图像保存到磁盘。如果你将它们放在Caches目录的子目录中,那么你的控制器就可以继续发送,直到子目录为空(随着它一直删除)。