2012-03-28 24 views
4

將RestKit與Core Data配合使用通過標記對象並使用Core Data保存對象,用戶可以在沒有Internet連接的情況下添加,編輯或刪除對象時提供脫機支持。RestKit - 離線存儲後發送添加/編輯/刪除的對象

如果互聯網再次可用,我將獲取所有添加/編輯/刪除的對象,將它們保存在數組中,並且知道使用常規方法和每個項目的循環將它們放到服務器上。陣列的

列表
- fetchedAddedCompanies
- fetchedEditedCompanies
- fetchedAddedContacts
- fetchedEditedContacts
- fetchedDeletedContacts

Init方法(實施例用於編輯公司)

// Added Companies 
... 

// Edited Companies 
for (Company *tempObj in fetchedAddedCompanies) 
{ 
    // Find keys for selected languages 
    [self updateAccountToServer:tempObj:addCompanyContext]; 
} 

// ... 

updateAccountToServer結束時,我發佈對象(self.company)及其映射到服務器。

... 
[objectManager postObject:self.company mapResponseWith:[companyMapper inverseMapping] delegate:self]; 
... 

問題

我在尋找更有效的解決方案時,用戶做了更新幾個對象,這樣, - 特殊的一個 - 也因爲與所有編輯/刪除添加一些新對象方法服務器返回將存儲的每個新創建對象的ID。

1)避免使用例如updateAccountToServer每個編輯的對象,併發送與所述RKObjectManagerregarding this question and a good answer

在我看來1使用RKRequestQueue一起的對象數組代替
2))將是難以實現,因爲該resourcePath爲每個請求包含一個唯一的ID,所以我已經試過2),但丟失的可能性使用

[syncQueue addRequest:[[RKObjectManager sharedManager] objectLoaderWithResourcePath:tempString delegate:self]]; 

感謝您的想法綁定映射爲每個請求

回答

1

我自己和其他一些人正在積極研究開發分支,以便將其自動集成到RestKit中。

我們在RK內部實現了一個同步管理器,該管理器監視NSManagedObjectContext的變化,如果網絡不可用,則將這些請求排隊,直到網絡恢復。

我們希望有更多的幫助/想法上的代碼,所以如果你能告訴我們更多關於您的使用情況下,該網頁上:

https://github.com/RestKit/RestKit/pull/573

+1

如果它是RestKit 0.10的一個分支,此分支似乎現在處於非活動狀態。是否有人在Restkit 0.20.x的相似分支上工作? – Diego 2013-05-28 21:51:22

1

爲1,您可以封裝的NSArray將插入/更新/刪除的對象插入到新對象中,然後將其發佈到服務器。爲此,您需要確保在修改的對象上設置了正確的位,以便服務器解密,並確保服務器可以接收該對象,並解構該對象以獲取一組修改的對象。