0

私のCoreDataモデルには、2つの自己参照関係を持つエンティティShapeが含まれています。これは、4つのプロパティを意味します。1つのペアは1対多の関係(Shape.containedBy <->> Shape.contains)であり、もう1つのペアは多対多の関係(Shape.nextShapes <<->> Shape.previousShapes)です。それはすべてアプリケーションで完全に機能するので、自己参照関係は一般的に問題ではないと思います。

ただし、モデルを新しいバージョンに移行する場合、Xcodeは自動生成されたマッピングモデルのコンパイルに失敗し、次のエラーメッセージが表示されます。

2009-10-30 17:10:09.387 mapc[18619:607] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "FUNCTION($manager ,'destinationInstancesForSourceRelationshipNamed:sourceInstances:' , 'contains' , $source.contains) == 1"'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00007fff80d735a4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x00007fff83f0a313 objc_exception_throw + 45
    2   Foundation                          0x00007fff819bc8d4 _qfqp2_performParsing + 8412
    3   Foundation                          0x00007fff819ba79d +[NSPredicate predicateWithFormat:arguments:] + 59
    4   Foundation                          0x00007fff81a482ef +[NSExpression expressionWithFormat:arguments:] + 68
    5   Foundation                          0x00007fff81a48843 +[NSExpression expressionWithFormat:] + 155
    6   XDBase                              0x0000000100038e94 -[XDDevRelationshipMapping valueExpressionAsString] + 260
    7   XDBase                              0x000000010003ae5c -[XDMappingCompilerSupport generateCompileResultForMappingModel:] + 2828
    8   XDBase                              0x000000010003b135 -[XDMappingCompilerSupport compileSourcePath:options:] + 309
    9   mapc                                0x0000000100001a1c 0x0 + 4294973980
    10  mapc                                0x0000000100001794 0x0 + 4294973332
)
terminate called after throwing an instance of 'NSException'
Command /Developer/usr/bin/mapc failed with exit code 6

'contains'は、自己参照プロパティの1つの名前です。とにかく、本当に大きな問題は、マッピングモデルを表示するときにエンティティマッピングを選択するとすぐにXcodeがクラッシュするため、このマッピングプロパティを見ることさえできないことです。だから私はここからどこへ行くのか本当に迷っています。自己参照プロパティを実際に削除できないので、コンパイルするマッピングモデルを手動で作成する必要があると思いますか?何か案は?

乾杯

4

1 に答える 1

6

さて、「含む」は予約語のようです。そのため、「#」を使用してエスケープする必要があります。移行に関するAppleのドキュメントでは、それを予約語として具体的に言及していませんが、決定的なリストが何であるかについても言及していません。

ただし、プロパティ名は、「description」などのNSObjectまたはNSManagedObjectメソッド名と同じにすることはできず、明らかに「含む」と思われます。

于 2009-11-21T15:55:59.313 に答える