2011-11-19 78 views
7

我從json文件加載數據,我將其保存。 我做了兩次... 我在Core Data sqlite數據庫中有兩個條目。 即使我在映射中設置了primaryKeyAttribute。RestKit主鍵屬性

mapping.primaryKeyAttribute = @"code"; 
    [mapping mapAttributesFromArray :mappedFields]; 
    [[RKObjectManager sharedManager].mappingProvider setMapping:mapping forKeyPath:entityName]; 

的json

{ 「myEntity所」:[{ 「代碼」: 「axv2」, 「數據」: 「內容」}]};

這裏回調:

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects { 

    NSLog(@"Entries loaded %d",[objects count]); 
    lastResult = objects; 

    for(MyEntity * myEntity in lastResult) {  
     [self saveContext];  
    } 
} 

我的實體正確映射...但Restkit允許一個以節省重複的條目與相同的主鍵?

這很奇怪,我明白這個主鍵屬性可以避免這個問題。

回答

1

由於採用最新版本RESTKit(0.23.2),您可以定義主鍵是這樣的:

[_mapping addAttributeMappingsFromDictionary:@{ @"id" : @"objectId", @"name" : @"name" }]; 
[_mapping setIdentificationAttributes:@[ @"objectId" ]]; 

而OBJECTID是你的核心數據對象的主鍵。

1

不,事實並非如此,因爲Core Data保留了自己的密鑰。您可以通過檢查您的主鍵是否存在並在保存有問題的實體實例之前輕鬆解決此問題。

+0

這意味着每次我想要保存上下文時,我必須循環託管上下文的每個實體來檢查實體是否存在於sqlite數據庫中? Restkit不提供某些東西?還是核心數據? – Sam

+1

基本上,是的。或者,在創建新項目之前,從數據庫中獲取它。如果提取返回爲空,則創建它,否則甚至不要將其插入托管對象上下文中。我這樣做,它非常有效。 – Mundi

+1

我有同樣的重複問題,但是Restkit在插入數據庫之前確實提供了一個檢查,但是由於某種原因,似乎沒有與我(和你)一起調用。看看我如何「解決」暫時的,直到我找到正確的答案http://stackoverflow.com/questions/7799890/primarykeyattribute-not-working-restkit-core-data – mateusmaso