2012-04-26 54 views
0

什麼是將Web服務數據緩存到核心數據中的好方法。主要目標是在設備上線或發生某些更新時將Web服務數據同步到核心數據中,並且用戶能夠也可以在離線狀態下獲取數據。那麼如何實現這個事情會有什麼好的建議。將Web服務數據緩存到核心數據

回答

1

嘗試RestKit:http://restkit.org/

RestKit的主要目標是讓開發者更多地考慮他們的應用程序的數據模型的 條款和少擔心發送請求,解析響應,並建立 的 細節遠程資源的表示。

2

我已經這樣做了。我的過程是使用一個網絡客戶端(在我的情況,AFNetworking),然後在成功的請求,我將做到以下幾點:

拆去核心數據實體

的所有對象的創建NSOperationQueue AppDelegate中,並使用該實例化一個新的ManagedObjectContext定製解析器類要在後臺線程

用於解析從Web服務的響應,並使用插入對象回CD實體在後臺線程

// Register context with the notification center 
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
[nc addObserver:self 
     selector:@selector(mergeChanges:) 
      name:NSManagedObjectContextDidSaveNotification 
      object:ctx]; 

然後,當我保存的管理對象(我做了一個節省每五點關),該通知將被髮送,並且此方法將被解僱:

- (void)mergeChanges:(NSNotification *)notification 
{ 
    id appDelegate = [[UIApplication sharedApplication] delegate]; 

    NSManagedObjectContext *mainContext = [appDelegate managedObjectContext]; 

    // Merge changes into the main context on the main thread 
    [mainContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) 
           withObject:notification 
          waitUntilDone:NO]; 
} 

這將更新的核心數據實體大多是在後臺,然後在主線程中合併更改(每五個「記錄」)。我最初的用戶界面是一個TableView,它依賴於正在更新的Core Data Entity,並且更新足夠快,足以讓用戶在新數據進入時能夠使用tableview(FetchedResultsController將管理插入新電視中的行)。

如果需要,我可以發送更多代碼,但其要點是使用NSOperationQueue在後臺線程上解析創建的託管對象,然後每隔一段時間(在我的情況下5條記錄)將更改合併到上下文中主線程的MOC。