2014-01-08 56 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; 
}