2013-07-03 122 views
1

我正在處理一個項目,其中一個對象包含一個故事提要。但是,就像Facebook或任何其他社交網絡一樣,這些Feed對象可以引用各種對象類型(事件,狀態更新等)。我想弄清楚的是如何將其存儲在CoreData中。使用CoreData創建新聞提要

目前我已經設置了這樣一個組實體有很多Story對象。然而,我陷入困境的是故事對象。這是我目前的:

Story 
--------- 
objectId (the ID of the object being referenced) 
objectType (Event, Status, etc) 
createdAt 
updatedAt 
metaData <-- This is what I'm trying to figure out 

事件可能有諸如「attendeeCount」與狀態更新之類的數據只有「文本」。我一直在考慮這兩個選項是:

  1. 存儲序列化的NSDictionary對象來存儲元數據,或
  2. 做一個子類實體

1聽起來更令人信服的解決方案給我,但我想聽聽CoreData有超過一週的使用經驗的人:)我不需要搜索當前的實際Feed項目,只需按日期對它們進行排序並顯示它們即可。

+0

你是如何得到這個飼料? – logixologist

回答

1

您可以使用所有Story對象具有的基本參數創建抽象實體Story。 比你可以創建其他具體實體,如事件,狀態更新與特定字段,並將這些具體實體的父實體參數設置爲Story。通過這種方式,具體實體繼承了Abstract Story實體的所有字段。

(您可以在實用工具 - >數據模型檢查器中設置抽象實體和父實體參數)。

因此,您將爲您的實體提供清晰易讀的界面。 你也可以在tableView中獲取並顯示所有實體,在獲取請求中指定「Story」實體。

編輯

是的,你可以設置從集團的故事一對多的關係。 例如

enter image description here

,你可以添加事件和狀態的實體是這樣的:

Group *grp = [NSEntityDescription insertNewObjectForEntityForName:@"Group" inManagedObjectContext:self.managedObjectContext]; 
    grp.goupID = @(12); 

    Event *event = [NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:self.managedObjectContext]; 
    event.storyID = @(123); 

    Status *status = [NSEntityDescription insertNewObjectForEntityForName:@"Status" inManagedObjectContext:self.managedObjectContext]; 
    status.storyID = @(1); 

    [grp addStoriesObject:event]; 
    [grp addStoriesObject:status]; 

    NSLog(@"group stories %@", grp.stories); 

登錄結果:

2013-07-03 23:14:03.706 crdtTest[85418:c07] group stories Relationship 'stories' on managed object (0x74b1f50) <Group: 0x74b1f50> (entity: Group; id: 0x74b1fa0 <x-coredata:///Group/t119EA6E0-0B3B-42EB-AB33-1553CE34ABA42> ; data: { 
    goupID = 12; 
    stories =  (
     "0x816e720 <x-coredata:///Status/t119EA6E0-0B3B-42EB-AB33-1553CE34ABA44>", 
     "0x816d980 <x-coredata:///Event/t119EA6E0-0B3B-42EB-AB33-1553CE34ABA43>" 
    ); 
}) with objects {(
    <Status: 0x816e6d0> (entity: Status; id: 0x816e720 <x-coredata:///Status/t119EA6E0-0B3B-42EB-AB33-1553CE34ABA44> ; data: { 
    group = "0x74b1fa0 <x-coredata:///Group/t119EA6E0-0B3B-42EB-AB33-1553CE34ABA42>"; 
    storyID = 1; 
}), 
    <Event: 0x816d930> (entity: Event; id: 0x816d980 <x-coredata:///Event/t119EA6E0-0B3B-42EB-AB33-1553CE34ABA43> ; data: { 
    eventDate = nil; 
    group = "0x74b1fa0 <x-coredata:///Group/t119EA6E0-0B3B-42EB-AB33-1553CE34ABA42>"; 
    storyID = 123; 
}) 
)} 
+0

嗯,這是一個有趣的方法。鑑於技術上集團有許多狀態更新和許多事件,這種方法是否有任何不利之處?還是我仍然可以設定這種關係? –

+0

也許這聽起來像是一個完美的解決方案。仍然想知道這種方法是否有任何缺點。現在就去配合,謝謝! –

+0

尼克,我編輯了我的答案 – Numeral