2014-05-15 36 views
2

我有一個關於在CoreDataRestKit之間使用邏輯的簡單問題。CoreData和RestKit

我正在使用RestKit將我的JSON響應映射到CoreData實體。我有一個評論事件。 我正在發送一個請求以獲取有關事件的信息,另外還有一個(現在)的評論。

有沒有辦法映射獨立於我以前的事件的評論,並加入他們之後還是必須加入他們與事件時有映射?我不知道最好的辦法是什麼。

在我未來的實現中,我想發送以獲取事件及其註釋的信息。但我仍然希望繼續使用我的第二種方法來獲取評論,而不必收到整個活動。

"comments": [ 
    { 
     "id": 23, 
     "user_id": 9, 
     "commentable_id": 12, 
     "commentable_type": "Event", 
     "content": "This is the content of the event", 
     "created_at": "2013-04-19 19:28:42.533901", 
     "updated_at": "2013-04-19 19:28:42.533901" 
    } 
] 
+0

你看過RKConnectionDescription。它允許您將註釋獨立映射到父模型。你的JSON看起來如何。如果你寄給我樣品,我可能會向你提供答案。 – Sandeep

+0

我添加了一個典型的'JSON'響應。如果我將這些註釋獨立映射到父項,那麼在映射之後如何將它們加入到父項中?無論如何,謝謝你這麼快的回答。 – BriceB

回答

0

您可以使用外鍵映射(RKConnectionDescription,根據@ insane-36的註釋)獲得RestKit連接對象之間的關係。如果適當的目標對象在上下文中可用,那麼將建立連接,如果不是,則不做任何事情。

如果您不想這樣做,那麼您需要編寫代碼來複制該任務,即獲取註釋,遍歷它們,獲取關聯的事件,連接關係,保存。

讓RestKit連接關係對您而言肯定更容易,並且並不妨礙您在沒有應該附加事件的情況下請求註釋。

請注意,您可以在事件和註釋映射上指定外鍵映射,以便首先加載哪個對象。當處理後者映射時,RestKit將連接到另一個映射。

+0

附加信息:http://stackoverflow.com/questions/17326087/foreign-key-relationship-mapping-with-restkit – Wain

+0

我知道我可以使用外鍵映射,但是可以手動添加關係到現有的對象?我有類似的是我的:'event.comments = comments_array'其中'comments_array'是我的'JSON'請求和'事件'一個現有對象的新映射? 基本上我不想重新加載整個事件,當我重新加載評論的事件。 – BriceB

+0

關閉。您的託管對象子類應該有一些爲關係添加的「NSSet」方法。你可以從你從映射結果得到的NSArray創建一個'NSSet',並用它來填充關係。如果您不使用外鍵映射,則只需要此操作。 – Wain

0

假設你有JSON像上面,你將不得不增加一個屬性對應一個特定的評論屬於這樣的,我們的JSON看起來像哪個事件,

"comments": [ 
    { 
     "id": 23, 
     "user_id": 9, 
     "commentable_id": 12, 
     "commentable_type": "Event", 
     "content": "This is the content of the event", 
     "created_at": "2013-04-19 19:28:42.533901", 
     "updated_at": "2013-04-19 19:28:42.533901", 
     "event_id": "10", /* Note this is a new attribute to map to the parent entity */ 
    } 
] 

現在,添加一個新的屬性給你的評論模型,這樣這個event_id將被存儲。我們創建一個屬性eventId

所以,讓我們創建映射爲實體,

RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Comment" inManagedObjectStore:[RKManagedObjectStore defaultStore]]; 
[mapping setIdentificationAttributes:@[@"identifier"]]; 
[mapping addAttributeMappingsFromDictionary:@{ 
    @"id": @"identifier", 
    @"updated_at": @"updatedAt", 
    @"created_at": @"createdAt", 
    @"user_id": @"userId", 
    @"commentable_id": @"commentableId", 
    @"commentable_type": @"commentableType", 
    @"content": @"content", 
    @"event_id": @"eventId" 
    }]; 

然後,我們將不得不增加連接映射事項標識糾正事件,

NSRelationshipDescription *eventRelationship = [[mapping entity] relationshipsByName][@"event"]; 

[mapping addConnection:[[RKConnectionDescription alloc] initWithRelationship:eventRelationship attributes:@{@"eventId": @"identifier"}]]; // this line says that you have to have eventId in your comments entity and then the identifier in event entity to which the eventId will be mapped to. 

就是這樣,你可以現在創建RKResponseDescriptor和RKManagedObjectRequestOperation來提取評論,它將指向正確的事件。

+0

謝謝你的回答。這是很好的映射。但我的主要問題是如何將它鏈接到現有的對象。我同意這種映射是必需的。 – BriceB

+0

一旦您使用此新連接描述再次獲取所有評論,它就會與現有事件相關聯。 – Sandeep