3

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 つのキーで文字列の配列にシリアル化する簡単な方法が欲しいだけです。

ご協力いただきありがとうございます!

4

0 に答える 0