11

2 つの Core Data エンティティ (ClientUserFile) があり、それらの間の関係を正常に設定できました。

両方のエンティティのクラスを作成し、それらを のサブクラスにしRKManagedObjectました。

新しい を作成するときにUserFile、それを に正しく関連付けたいと考えていClientます。これが私がやっていることです:

Client *client = [Client objectWithPrimaryKeyValue:@"1"];
UserFile *file = [UserFile object];
file.client = client;
file.clientId = client.clientId;
[[RKObjectManager sharedManager] postObject:file delegate:self];

file.clientId正しいパラメーターがサーバーに送信されるように割り当てる必要があるようです (割り当てるだけの場合file.client、送信されたclient_idものは空白になります)。

file.client新しい空Clientのファイルが作成されてファイルに関連付けられないようにするには、割り当てる必要があるようです (クライアント関係が必要です)。

これは正しいです?外部キーと実際のエンティティの両方を割り当てる必要がありますか? これは私には少し冗長に思えますが、Core Data と RestKit の知識が不足していることを喜んで認めます!

4

1 に答える 1

9

あなたの質問に答えるには、現時点では両方のステップを実行する必要があるようです。ライブラリに含まれているRKDiscussionBoardExampleのコードは次のとおりです。

DBTopic* topic = [[DBTopic findFirstByAttribute:@"topicID" withValue:topicID] retain];
_post = [[DBPost object] retain];
_post.topicID = topic.topicID;
_post.topic = topic;

したがって、この例では関係が適切に設定されていないか、実際には両方の手順が必要です。

また、別のオブジェクトマッパーを持ち、RKManagedObjectを廃止した最新バージョンのRestKitを使用する必要があります。あなたの関係は次のようになります:

RKManagedObjectMapping* clientMapping = [RKManagedObjectMapping mappingForClass: [Client class]];
clientMapping.primaryKeyAttribute = @"clientID";
[clientMapping mapKeyPathsToAttributes:
@"id", @"clientID",
nil];

RKManagedObjectMapping* userFileMapping = [RKManagedObjectMapping mappingForClass:[UserFile class]];
userFileMapping.primaryKeyAttribute = @"userFileID";
[userFileMapping mapKeyPathsToAttributes:
 @"id", @"userFileID",
 @"client_id", @"clientID",
 nil];

[userFileMapping mapRelationship:@"client" withObjectMapping:clientMapping];
于 2011-07-04T18:45:48.477 に答える