2012-04-30 4 views
2

개체 삽입/추가를 시도했지만 몇 시간이 걸렸지 만 중복 된 레코드가 발생했습니다. 캠페인 레코드가 이미 삽입되어 있어도 다시 삽입되었습니다. 내가 놓친 게 있니? Card.hRestKit 수동으로 개체 저장

@class Campaign; 

@interface Card : NSManagedObject 

@property (nonatomic, strong) NSNumber* cardId; 
@property (nonatomic, strong) NSString* name; 
@property (nonatomic, strong) Campaign* campaign; 

@end 

ViewController.m

Campaign.h

@interface Campaign : NSManagedObject 

@property (nonatomic, strong) NSNumber* campaignId; 
@property (nonatomic, strong) NSString* title; 

@end 

: 아래

내 코드입니다
... 

Campaign* campaign = [Campaign object]; 
campaign.campaignId = [NSNumber numberWithInt:1]; 
campaign.title = @"Hello world"; 

Card* card = [Card object]; 
card.cardId = @"1234567890"; 
card.campaign = campaign; 

[[[RKObjectManager sharedManager] objectStore] save:nil]; 

EDITED ViewController.m는

... 
RKManagedObjectMapping* cardMapping = [RKManagedObjectMapping mappingForClass:[Card class] inManagedObjectStore:[RKObjectManager sharedManager].objectStore]; 
[cardMapping mapKeyPath:@"id" toAttribute:@"cardId"]; 
[campaignMapping mapKeyPath:@"name" toAttribute:@"name"]; 
cardMapping.primaryKeyAttribute = @"cardId"; 

RKManagedObjectMapping* campaignMapping = [RKManagedObjectMapping mappingForClass:[Campaign class] inManagedObjectStore:[RKObjectManager sharedManager].objectStore]; 
[campaignMapping mapKeyPath:@"id" toAttribute:@"campaignId"]; 
[campaignMapping mapKeyPath:@"title" toAttribute:@"title"]; 
campaignMapping.primaryKeyAttribute = @"campaignId"; 

Campaign* campaign = [Campaign object]; 
campaign.campaignId = [NSNumber numberWithInt:1]; 
campaign.title = @"Hello world"; 

Card* card = [Card object]; 
card.cardId = @"1234567890"; 
card.campaign = campaign; 

[[[RKObjectManager sharedManager] objectStore] save:nil]; 

답변

1

예, 당신의 매핑에 .primaryKeyAttribute를 추가합니다. 나머지 키트를 통해 데이터를 가져올 때이 작업은 pk 작업을 수행합니다. Restkit을 사용하여 '정상적인'핵심 데이터를 처리하는 경우 참조 용 완전성 등을 직접 처리해야합니다.

+0

.primaryKeyAttribute (위 편집 참조)로 코드를 업데이트했지만 여전히 캠페인 엔티티에서 중복 된 레코드가 표시됩니다. 그것은 RKObjectManager loadObjectsAtResourcePath와 잘 작동하지만 수동으로 객체를 추가하려고 할 때는 그렇지 않습니다. – Teon

+0

예. 핵심 데이터 작업을 수행하는 중이면 자신이 원하는 경우 고유 한 ID를 생성해야합니다. card.campaign을 설정하면 관계를 저장하므로 핵심 데이터에는 sqlite db를 살펴 보지 않으면 볼 수없는 자체 내부 ID가 있습니다. 당신이 원할 수있는 유일한 이유는 당신이 원격 데이터베이스에 동기화하고 그들과 동기화하고 싶다면,하지만 내가 말했던 것처럼 코드에서 직접해야 할 필요가있다. –

+0

http://stackoverflow.com/questions/10264224/auto-index-for-a-coredata-in-objective-c를 참조하십시오. –