2012-04-30 6 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も参照してください。 –

関連する問題