email エンティティと phone_number エンティティの両方に対して 1 対多の関係を持つ、CoreData でサポートされている連絡先オブジェクトがあります。ここで言及されているすべてのオブジェクトは NSManagedObjects です。
phone_number エンティティと email エンティティは両方とも、それぞれ phone_number と email を表す NSString* である 1 つの属性のみを持ちます。
現在、オブジェクトをシリアル化すると、次のようなものが得られます
{contacts:
[{"name":"person1",
"emails":[{"email":"email1@email.com"}, {"email":"email2@email.com"}],
"phone_numbers":[{"number":"1111111111"}, {"number":"2222222222"}]},
{"name":"person2",
"emails":[{"email":"email1@email.com"}, {"email":"email2@email.com"}],
"phone_numbers":[{"number":"3333333333"}, {"number":"4444444444"}]}]
}
このような形で連載したいと思います
{contacts:
[{"name":"person1",
"emails":["email1@email.com","email2@email.com"],
"phone_numbers":["1111111111", "2222222222"]},
{"name":"person2",
"emails":["email1@email.com", "email2@email.com"],
"phone_numbers":["3333333333", "4444444444"]}]
}
「emails」と「phone_numbers」のリストが単なる文字列のリストであり、各 phone_number/email に関連付けられたキーがないことに注意してください
現在のマッピング コードは (phone_number マッピング コードは Email マッピング コードとまったく同じです)
@implementation Email
@dynamic email;
@dynamic contact;
+ (void)emailRKObjectMapping {
RKManagedObjectMapping* emailMapping = [RKManagedObjectMapping mappingForEntityWithName:@"Email" inManagedObjectStore:[RKObjectManager sharedManager].objectStore];
[emailMapping mapKeyPath:@"email" toAttribute:@"email"];
[[RKObjectManager sharedManager].mappingProvider addObjectMapping:emailMapping];
//Serialization mapping for Contact class
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping":[emailMapping inverseMapping] forClass:[Email class]];
}
@end
電子メール/電話番号を指す関係を持つ連絡先マッピング コード
@implementation Contact
...
@dynamic emails;
@dynamic phoneNumbers;
...
+ (void)contactRKObjectMapping {
RKManagedObjectMapping* contactMapping = [RKManagedObjectMapping mappingForEntityWithName:@"Contact" inManagedObjectStore:[RKObjectManager sharedManager].objectStore];
...
...
[[RKObjectManager sharedManager].mappingProvider addObjectMapping:contactMapping];
//Serialization mapping for Contact class
RKManagedObjectMapping* contactSerializationMapping = [contactMapping copy];
[contactSerializationMapping mapKeyPath:@"emails" toRelationship:@"emails" withMapping:[[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[Email class]]];
[contactSerializationMapping mapKeyPath:@"phone_numbers" toRelationship:@"phoneNumbers" withMapping:[[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[PhoneNumber class]]];
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:[contactSerializationMapping inverseMapping] forClass:[Contact class]];
}
私には、電子メールと電話番号の配列内のすべての電話番号と電子メールに対してキー「電話番号」または「電子メール」を送信する必要があるのはばかげているようです。1 つのキーで文字列の配列にシリアル化する簡単な方法が欲しいだけです。
ご協力いただきありがとうございます!