Core Data ModelでAttributeに付ける名前ですが、NSManagedObjectのメソッドやプロパティと同じ名前は付けることが出来ません。例えばdescriptionやcopyなどですね。でもそれだとWeb APIなどから読み込んだデータをimportする場合に、使えない名前と同じだと困ります。
何かしら方法がないかなと調べた所、Attributeには別の名前を付けておいて、userInfoにimportする時の名前を設定しておく方法を見つけました。設定するのはKeyが”mappedKeyName”で、Valueにimportする時の名前です。例えばAttributeは”catchcopy”、importする名前が”copy”だとすると以下のように設定します。
これを設定しておくと、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!"; })