2014-01-08 58 views
0

我需要有关后台同步一些建议......iOS同步在后台线程

目前,我有应用程序启动后在后台这将启动同步,然后应用程序通过定时器继续每2分钟。现在我想让用户在不耐烦的情况下手动启动同步过程......但确保当前没有正在运行的同步。

如果有同步正在运行,则用户请求应该“重定向到”该同步,如果不是,则应启动新的同步,但防止在手动同步正在进行时启动自动同步。

不幸的是我没有对如何做到这一点的想法....

THX对您有所帮助!

BR鲍里斯

回答

0

你不给你是如何试图做到这一点的细节,但一个简单的解决方案应该是这样:

  • 一个标志添加到您的控制器:isAlreadySyncing;

  • 当你开始同步时,设置标志;完成后重置;

  • 当用户开始同步不耐烦时,检查标志:如果它是真的,不要做任何事;否则,开始同步(并设置标志,如上);

  • 当您的计时器触发并尝试同步时,请检查该标记:如果设置了,则不要执行任何操作。

希望这会有所帮助。

0

我想你有不同的控制器。 你需要做的是使用NSUserDefaults。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setValue:@"YES" forKey:@"is_sync_auto"]; 
[defaults setValue:@"NO" forKey:@"is_sync_manual"]; 
[defaults synchronize]; 

当用户开始同步出不耐烦,检查默认值:如果是YES,没有做任何事情;否则,开始同步(并且如上所述设置标志)。

要重定向请求,您可以创建一个共享实例,然后再次调用它。

更好的办法是创建一个单例类。 让这个单例类处理同步操作,如果不再有一个实例可以创建,它将解决您的问题。

+ (instancetype)sharedConnection { 
    static ConnectionClass *_sharedConnection = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     _shared_sharedConnection = [[ConnectionClass alloc] init]; 
    }); 

    return _sharedConnection; 
}