2013-11-27 168 views
0

我有兩個實體:ContactListing。 A User可以將特定的Listing標記爲其Favourite。 我正確設置了關係,並且我可以爲User添加Listing作爲FavouriteRestkit addConnectionForRelationship掙扎

我面臨的問題是API方面。它給我的關係只有id s:contact_idlisting_id

如何設置RestKit來映射Favourite的對象中定義的關係,該關係是從服務器獲得的,該服務器只給出聯繫人和列表的兩個對象id s?

Restkit版本:0.20.3

JSON用於收藏:

{ 
     "contact_id": "1", 
     "created_at": "2013-11-06T15:02:21.056Z", 
     "id": "2", 
     "listing_id": "3", 
     "updated_at": "2013-11-06T15:02:21.056Z" 
} 

JSON用於聯繫人:

{ 
    "id": 1, 
    "favorites": [ 
     { 
      "contact_id": "1", 
      "created_at": "2013-11-06T15:02:21.056Z", 
      "id": "2", 
      "listing_id": "3", 
      "updated_at": "2013-11-06T15:02:21.056Z" 
     } 
    ], 
    "first_name": Max, 
} 


////////// 
// Contact 
////////// 
RKEntityMapping *contactMapping = [RKEntityMapping mappingForEntityForName:@"PBContact" inManagedObjectStore:managedObjectStore]; 
contactMapping.identificationAttributes = @[ @"object_id" ]; 
[contactMapping addAttributeMappingsFromDictionary:@{ @"id": @"object_id" }]; 
[contactMapping addAttributeMappingsFromArray:@[ @"given_name", @"address", @"birthday", 
               @"city", @"company_name", @"country", 
               @"email", @"family_name", @"gender", 
               @"mobile_number", @"note", @"phone_number", 
               @"state", @"zip_code", @"created_at", @"updated_at" ]]; 


////////// 
// Listing 
////////// 
RKEntityMapping *listingMapping = [RKEntityMapping mappingForEntityForName:@"PBListing" inManagedObjectStore:managedObjectStore]; 
listingMapping.identificationAttributes = @[ @"object_id" ]; 
[listingMapping addAttributeMappingsFromDictionary:@{ @"id": @"object_id", @"description": @"descriptions" }]; 
[listingMapping addAttributeMappingsFromArray:@[ @"address", @"name", @"bathrooms", @"bedrooms", 
               @"city", @"country", @"price", @"title", 
               @"zip_code", @"latitute", @"longitude", @"status", 
               @"total_area", @"year_built", @"property_type", @"listing_type", 
               @"size", @"lot_size", @"parking_spaces", @"view", 
               @"state", @"note", @"monthly_rent", @"created_at", @"updated_at" ]]; 


////////// 
// Relationships 
////////// 

[contactMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"favorites" toKeyPath:@"favoriteListings" withMapping:listingMapping]]; 

[listingMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"favorites" toKeyPath:@"prospects" withMapping:contactMapping]]; 

響應描述

RKResponseDescriptor *contactResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:contactMapping 
                         method:RKRequestMethodAny 
                        pathPattern:@"api/v1/contacts" 
                         keyPath:nil 
                        statusCodes:statusCodes]; 
+0

什麼版本的RestKit?顯示您收到的JSON以及您當前使用的映射。 – Wain

+0

收到用戶時,收藏夾是否始終嵌套?所以你只有一個響應描述符? – Wain

+0

是的,收藏夾總是嵌套。並且我有一個響應描述符描述符 –

回答

0

你不需要(並應該刪除E):

[listingMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"favorites" toKeyPath:@"prospects" withMapping:contactMapping]]; 

因爲關係已經被從另一側配置在contactMapping。它的外觀不應該有任何其他變化。

爲什麼有3個IDS這是不完全清楚:

"contact_id": "1", 
"id": "2", 
"listing_id": "3", 

我假設contact_id總是匹配外接觸的收藏夾中嵌套,並且不需要。而那id是有用的信息(所以你的映射是正確的)。

在您的核心數據模型中,favoriteListingsprospects應該是彼此相反的。


根據您的最新評論,我認爲您需要創建一個新的不同的列表映射。該映射僅包含@"listing_id" : @"object_id"。這可以鏈接到現有的上市實體,也可以創建一個可以稍後填寫的佔位符。這是您應該用作contactMapping上的關係的映射。

+0

該id是來自服務器的Favorite對象的ID。 (我沒有CoreData中的這個對象)並且contact_id和listing_id告訴我聯繫人1將列表3設置爲它的最愛。因此,Restkit應該將ID爲3的列表添加到Contact的favouriteListings中。 –

+0

房源詳情來自其他請求?你有列表對象,你需要連接它們(外鍵映射)? – Wain

+0

我通過/ listings獲取我的聯繫人詳細信息通過/列表 我會通過聯繫人中的嵌套收藏夾或通過/收藏夾 –