我有一个方法可以将一组图像保存到我的数据库中。这发生在后台,因此用户可能会弹出导航控制器,从而保留多个未保存的图像。
- (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
发送通知以运行此方法,以便无论用户去哪里,该方法都会继续运行?如何保持此方法的运行?
答案 0 :(得分:1)
你可以通过很多方式丢失这些图像。该应用程序可能会被杀死。无论你做什么,他们都会离开。
一种好方法是将所有图像保存到Core Data模型中,以便将它们保存在磁盘上。然后创建一个协调后台上传的模型控制器。模型控制器不属于任何视图控制器,直到它们全部被发送为止。它可以在云中一旦删除图像(如果愿意,可以删除)。
这样,当应用程序启动时,您还可以检查是否有未发送的图像。模型控制器只进行上传。
这种方法的好处是图像不会丢失,并且容忍网络连接不良(图像保留在模型中,直到可以发送)。
如果您真的不想使用Core Data,那么您可以自己将图像保存到磁盘。如果你将它们放在Caches目录的子目录中,那么你的控制器就可以继续发送,直到子目录为空(随着它一直删除)。