2013-08-21 55 views
0

我開發了一個應用程序,它有一個Core Data,現在我想到Synchronize它到我自己的server。這是我第一次這樣做,我搜索谷歌很多也StackOverflow,但我找不到一個明確的方法來工作。同步核心數據到網絡服務器

我已經創建的server相同core data,但我不知道怎麼知道的一些行已經synced與否(如何安排serverClient之間的連接),我應該將另一列添加到core data as boolean告訴我sync status?!!或者通過添加一個timestamp?!! ..所以請任何人都可以幫助我,或知道如何做到這一點,告訴我! 我需要邏輯幫助。我正在使用REST API(POST,GET)方法。 謝謝。

回答

1

你可以看看使用RestKit來幫助你與服務器通信。

是的,您需要添加一些附加數據,以確定數據是否自上次與服務器同步後進行了編輯。一個BOOL應該足夠這個,只要在任何其他屬性被改變時設置它(你可以使用KVO來協助這個)。

您將需要創建並控制將更新發送回服務器的邏輯以及何時。如果您發佈了單個對象,那麼RestKit可以響應並自動將BOOL設置爲false(但您是否希望這樣做,這取決於有多少對象正在更改,多長時間以及多大 - 您不需要想要對服務器進行大量頻繁的小更新)。

+0

這是我落得這樣做。核心數據中有一個名爲isSynced的額外列 - 如果它已更新,則將其設置爲false,然後調用服務器並嘗試更新。 – Nagra

0

我最近在我的一個應用程序中完成了這項工作。簡而言之,您應該知道的是,實體的「屬性」應該被視爲單獨的列,其中表名可以與「實體名稱」相同。之後,如果需要同步數據,可以通過在服務器端可以檢索的API頭中設置數據來完成。

例如:假設有一個名爲PlaylistData的實體,其中包含屬性playlist_name和歌曲。服務器端的列名相同。現在你想將這些保存在服務器上。 首先將數據保存在playlistNameArray中,並將歌曲保存在songArray中。 之後 -

NSString *api = [NSString stringWithFormat:SAVE_PLAYLIST_API,id1]; 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:api] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60]; 

[request setHTTPMethod:@"POST"]; 

NSMutableDictionary *requestDict = [NSMutableDictionary dictionary]; 

[requestDict setObject:self.playlistName forKey:@"playlist_name"]; 
[requestDict setObject:songIdArray forKey:@"songs"]; 

NSError *error = nil; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:requestDict 
                options:NSJSONWritingPrettyPrinted 
                error:&error]; 
NSString *jsonStr =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

[request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

[request setHTTPBody:jsonData]; 

id response = nil; 
NSError *error1 = nil; 
NSData *recievedData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error1]; 

NSString *dataReceived =[[NSString alloc] initWithData:recievedData encoding:NSUTF8StringEncoding]; 

NSError *error2 = nil; 

//你可以看到「recievedData」審查從服務器的響應。