我需要一些关于后台同步的建议......
目前我有一个应用程序,它在应用程序启动后在后台开始同步,然后每隔2分钟通过计时器继续。现在我想让用户在不耐烦的情况下手动启动同步过程......但要确保当前没有正在运行的同步。
如果正在运行同步,则如果不启动新同步,则应将用户请求“重定向”到此同步,但在手动同步过程中阻止自动同步启动。
不幸的是,我不知道如何做到这一点......
谢谢你的帮助!
BR鲍里斯
答案 0 :(得分:0)
你没有详细说明你是如何尝试这样做的,但一个简单的解决方案应该就是这个:
为您的控制器添加一个标记:isAlreadySyncing
;
当你开始同步时,设置标志;完成后重置;
当用户开始不耐烦地同步时,检查标志:如果是,则不要做任何事情;否则,开始同步(并设置标志,如上所述);
当您的计时器触发并尝试同步时,请检查标志:如果设置了,请不要做任何事情。
希望这有帮助。
答案 1 :(得分:0)
我认为你有不同的控制器。 您需要做的是使用NSUserDefaults。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:@"YES" forKey:@"is_sync_auto"];
[defaults setValue:@"NO" forKey:@"is_sync_manual"];
[defaults synchronize];
当用户开始不耐烦地同步时,检查默认值:如果是,则不做任何事情;否则,开始同步(并设置标志,如上所述)。
要重定向请求,您可以创建共享实例,然后再次调用它。
OR
更好的方法是创建一个单例类。 让单例类处理同步操作,因为不能再创建一个实例,它将解决您的问题。
+ (instancetype)sharedConnection {
static ConnectionClass *_sharedConnection = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_shared_sharedConnection = [[ConnectionClass alloc] init];
});
return _sharedConnection;
}