MagicalRecord : Attributeの名前とimportする時の名前が違うときの設定

Written by じび on 7月 5th, 2014

Core Data ModelでAttributeに付ける名前ですが、NSManagedObjectのメソッドやプロパティと同じ名前は付けることが出来ません。例えばdescriptionやcopyなどですね。でもそれだとWeb APIなどから読み込んだデータをimportする場合に、使えない名前と同じだと困ります。

何かしら方法がないかなと調べた所、Attributeには別の名前を付けておいて、userInfoにimportする時の名前を設定しておく方法を見つけました。設定するのはKeyが”mappedKeyName”で、Valueにimportする時の名前です。例えばAttributeは”catchcopy”、importする名前が”copy”だとすると以下のように設定します。

スクリーンショット 2014-07-05 23.13.07

これを設定しておくと、NSObject+MagicalDataImport.mのMR_lookupKeyForAttribute:で”mappedKeyName”に設定した名前が取得されます(設定されていないとAttributeの名前が取得されます)。

試しに以下のコードで試してみると、

    Entity *entity = [Entity MR_createEntity];
    
    NSDictionary *dict = @{@"copy": @"Hey, Jack!"};
    
    [entity MR_importValuesForKeysWithObject:dict];

無事に取得出来ました。

entry=<Entity: 0x8c5a450> (entity: Entity; id: 0x8c5a480 <x-coredata:///Entity/t3EC7B28C-474E-44E0-9836-F59A4DDDF34E2> ; data: {
    catchcopy = "Hey, Jack!";
})
 

Leave a Comment