2013-07-09 158 views
0

看起來像我堅持計劃我的核心數據模型結構的決定,因爲我不明白核心數據如何在我的情況下需要工作。現在我有一個實體CustomerCity。現在,它們中的每個都沒有特性,也沒有它們之間的關係。它們與其他對象都有很多關係,因此它們是完全獨立的對象。在我的Customer實體中,我有city財產(在哪個城市客戶所在地)。在City實體的價值需要匹配name(城市的名字)的價值。 Scheme如下所示:enter image description here核心數據模型規劃

City是別名的對象是通過解析Web上的JSON文件形成的,現在這部分工作正常。我在NSManagedObject子類(從實體產生)中添加了一種CustomerCity實體檢索name屬性值,並將其存儲在城市性質:

- (City *)city 
{ 
    return (City *)[[PTDataFetchHelper sharedInstance] entityForName:@"City" withServerID:self.city_server_id inContext:[self managedObjectContext]]; 
} 

這個工作沒有關係,但我的UITableView(我使用NSFetchedResultsController像這樣的來源)開始工作非常緩慢,這種提取。我也明白,使用這種方案我不能實現同時搜索CustomerCity對象 - 我只能從一種實體中獲取。我發現我可以爲這兩個創建父實體,但它們在邏輯和結構上都是獨立的。解決這兩個問題最好的架構方式是什麼? 任何意見讚賞。

回答

1

幾個意見:

  • 你已經做出了故意避免建立在模型CityCustomer之間的關係。我不確定爲什麼基於我對您的要求的理解。你發表評論說你「在NSManagedObject子類中爲Customer添加了一個方法,從City中檢索名稱屬性值並將其存儲在city屬性中。」但這並不是你所做的。您爲city屬性創建了一個獲取方法,該方法在Customer上每次調用時都會從上下文中動態獲取城市名稱。這可能是您報告緩慢的原因。

  • 可以創建一個穿越關係的NSFetchRequest。調查:

  • CustomerCity實際上並沒有邏輯上獨立的,因爲customerInstance.city必須始終這是一個cityInstance.name因爲你現在構建的名稱。

+0

NSBum,你是絕對正確的,不需要在這裏避免關係。這只是我之前程序員的代碼,我需要修復它。 Docs告訴我們,我們可以獲取的不僅僅是一個實體的屬性,還包括來自任何地方的使用關係和謂詞的一切屬性,這可以解決我的兩個問題。感謝幫助! – Alex

+1

如果你想保持同樣的架構沒有關係,你可以通過讓'city' getter從'City'對象獲取一次城市名稱來獲得更好的性能 – FluffulousChimp

+0

我沒有必要保持原始數據模型,所以我將實現實體之間的關係。再次感謝! – Alex