2011-09-01 120 views
0

我正在創建一個從Web服務器(MySQL)中提取數據的應用程序,使用Core Data將其解析並存儲在SQLite數據庫中。如何同步核心數據關係?

MySQL數據庫有一個「字」表。每個單詞可以在'類別'中。所以單詞表有一個'category_id'字段來加入表格。

我有一些麻煩我的頭圍繞如何在我的應用程序在本地複製此。我目前有匹配MySQL數據庫結構的實體,但沒有關係。看起來在我的'詞語'實體中,我不應該需要'category_id'字段(我應該有一個一對一的'類別'關係設置)。

我很困惑,如何保持這一核心數據關係的同步與Web服務器?

回答

1

假設您有EntityWordCategory您需要建立關係(命名可能有點模糊)。還假設Category可以有很多單詞和

// Word Entity 
Relationship Destination Inverse 
category  Categories  words 

// Category Entity 
Relationship Destination Inverse 
words   Word   category  // To-Many relationship 

你是正確的,你不會需要CATEGORY_ID字段的所有關係通過對象圖是核心數據的維護管理。您仍然需要在每個實體中使用主鍵(如server_id(或類似)),否則在更新/查找已保存的對象時將遇到問題。

這是我如何處理同步數據從外部數據庫(我用的RESTful接口,使用JSON但其實並不重要)

  1. 抓鬥由SERVER_ID
  2. 排序的飼料獲取的主鍵( SERVER_ID)進料
  3. 中的所有對象的執行取使用謂詞等... @"(serverId IN %@)", primaryKeys 這是由主鍵進行排序。
  4. 逐步通過每個陣列。如果提取結果有我的記錄,然後我更新它。如果沒有,我插入一個新的。
  5. 您將需要兩個WordCategory
  6. 接下來這麼做取形成的關係
  7. 使用的核心數據添加對象產生適當的方法一部分的所有對象。例如像`[myArticle addWords:[NSSet setWithObjects:word1,word2,word3,nil];

這是我很難測試,但這應該給你一個起點? 良好的使用堆棧溢出看到一個傢伙閃亮當然參加者 - 它不只是我

+0

感謝您的答覆。當你說「的核心數據生成適當的方法」究竟是什麼意思呢?您是否使用XCode自動生成模型? – Rich

+0

我通常使用WYSIWYG編輯'model',然後執行'File-> New-> New File-> Core Data-> NSManagedObjectSubclass'併爲每個'Entity'創建'NSManagedObject'的子類。您可以查看生成的類的'.h'文件並查看爲關係生成的方法 –