Основные данные:перенос объектов с самоссылающимися свойствами
-
22-07-2019 - |
Вопрос
Моя базовая модель данных содержит объект Shape, который имеет две самореферентные связи, что означает четыре свойства.Одна пара - это отношение "один ко многим" (Shape.containedBy <->> Shape.contains), а другой - отношение "многие ко многим" (Shape.nextShapes <<->> Форма.Предыдущие формы).Все это отлично работает в приложении, поэтому я не думаю, что отношения, ссылающиеся на себя, являются проблемой в целом.
Однако, когда дело доходит до переноса модели на новую версию, 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
"содержит" - это имя одного из самоссылающихся свойств.В любом случае, действительно большая проблема заключается в том, что я не могу даже взглянуть на это свойство сопоставления, поскольку Xcode выходит из строя, как только я выбираю сопоставление объектов при просмотре модели сопоставления.Так что я действительно немного запутался, куда идти дальше.Я действительно не могу удалить самоссылающиеся свойства, поэтому я думаю, что мне нужно вручную создать модель сопоставления, которая компилируется?Есть какие-нибудь идеи?
Ваше здоровье
Решение
Итак, похоже, что "содержит" может быть зарезервированным словом, и поэтому его необходимо экранировать с помощью "#". Документы Apple в разделе "миграция" конкретно не упоминается это как зарезервированное слово, хотя они также не говорят, каков окончательный список.
Но, похоже, что имя свойства не может совпадать с именем любого метода NSObject или NSManagedObject, такого как "description", и, по-видимому, "содержит".