2014-03-03 36 views
0

我遇到RestKit有趣的問題。我希望能夠通過CoreData中的uniqueID映射我的對象。它看起來像RKConnectionDescription應該讓我做到這一點。我想在RegisteredUser和BasicModel對象之間建立連接。事情是,當我創建連接時,我收到NSInternalInconsistencyException,因爲RestKit說,Cannot connect relationship: invalid attributes given for source entity 'RegisteredUser'使用initWithRelationship創建RKConnectionDescription時出現異常:屬性:

下面是我必須爲用戶創建映射的代碼。

RKEntityMapping *userEntityMapping = [RKEntityMapping mappingForEntityForName:@"RegisteredUser" inManagedObjectStore:[RKManagedObjectStore defaultStore]]; 
[userEntityMapping addAttributeMappingsFromArray:@[@"uniqueID", 
                @"createdAt", 
                @"updatedAt", 
                @"firstName", 
                @"middleName", 
                @"lastName", 
                @"email", 
                @"gender", 
                @"dateOfBirth", 
                @"profileImageUpdatedAt"]]; 
NSEntityDescription *userEntity = [NSEntityDescription entityForName:@"RegisteredUser" inManagedObjectContext:[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext]; 
NSRelationshipDescription *basicModelRelationship = [userEntity relationshipsByName][@"basicModel"]; 
RKConnectionDescription *connection = [[RKConnectionDescription alloc] initWithRelationship:basicModelRelationship attributes:@{@"basicModel": @"uniqueID"}]; 
[userEntityMapping addConnection:connection]; 

在覈心數據的RegisteredUser具有稱爲basicModel一個BasicModel實體一對一的關係。另外,BasicModel實體具有uniqueID屬性。

據我所知,我正在根據示例here正確創建RKConnectionDescription。問題是當我打電話給initWithRelationship:attributes:時,它聲稱在RegisteredUser實體上有一個basicModel屬性,當然這不是。關係只有一個basicModel,所以我得到了我上面描述的崩潰。

爲什麼RestKit甚至檢查RegisteredUser是否有一個屬性basicModel如果它期望我爲關係創建連接?我在這裏錯過了什麼嗎?

+0

你的JSON是嵌套的嗎?或者是在兩個不同的響應(外鍵映射)之後進行連接? – Wain

+0

試圖用外鍵映射。當請求用戶時,JSON將如下所示。 {results:{firstname:「Blah」,lastName:「Blahblah」,basicModel:3,etc ...},其中3是basicModel被管理對象的uniqueID。 –

回答

1

使用RKConnectionDescription是正確的,但您如何使用它是錯誤的。在這一行:

initWithRelationship:basicModelRelationship attributes:@{@"basicModel": @"uniqueID"}]; 

你講述的關係RestKit,但它應該使用在RegisteredUser實體命名basicModel屬性找到BasicModel連接,在RegisteredUseruniqueIDbasicModel值匹配在BasicModel

因此,需要改變的是basicModel。您需要添加一個屬性,如basicModelIdRegisteredUser實體。它可能是暫時的。將其添加到RegisteredUser映射中並使用RKConnectionDescription中的basicModelId

+0

我明白了,這似乎有點愚蠢,我必須爲我的對象所擁有的每一種關係定義一個屬性。你知道屬性的目的是什麼嗎?我應該使用嵌套字典方法,我有能力改變我的REST API。我也可以使用嵌套對象的外鍵映射CoreData中的對象。非常感謝你的幫助! –

+0

這就是外鍵映射的工作原理,所以不適用於所有關係。如果你有嵌套的JSON,那麼你不需要外鍵映射。 – Wain

+0

嗯,那麼如果我使用嵌套的JSON,並且只在嵌套的JSON中包含「uniqueID」字段,那麼所有其他字段都將被假定爲null並在CoreData中被覆蓋?或者它只會更新我在JSON中包含的屬性? –

相關問題