MagicalRecord で “To many” & “Ordered” の Relationship を使う場合は mogenerator が必須

Written by じび on 7月 5th, 2014

MagicalRecordを使っていてハマったのでメモ。

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

Core Data Modelで”To Many”かつ”Ordered”のRelationshipを作った場合、mogenerator を使ってソースコードを生成しないと、MagicalRecordでMR_importValuesForKeysWithObject:を実行した時に、NSInvalidArgumentExceptionやSIGABRTが発生してしまう。

これはMagicalRecordが、mogeneratorで生成される”xxxSet”というメソッド(xxxはRelationshipのName)を使用しているため。元々、Xcodeでソースコードを生成する時に、Orderedが指定されているとMSOderedSet型のプロパティを作るんだけど、これだとaddObject:とかが出来ない。そのためmogeneratorでMSMutableOderedSetを返す代わりのメソッド”xxxSet”を作っていて、MagicalRecordはこれを利用していた。エラーが起きていたのはNSManagedObject+MagicalDataImport.mのMR_addObject:forRelationship:内だった。

この辺りのヒントは以下で見つけた。
https://github.com/magicalpanda/MagicalRecord/issues/300

 

Leave a Comment