0

У меня есть проект CoreData, где есть два связанных объекта (Пользователи и исследования), эти сущности имеют отношение «один ко многим» к другому объекту (UserStudy), который имеет одно- к одному для каждого из первых двух объектов и некоторые дополнительные атрибуты.CoreData - одна сторона отношений всегда равна нулю

У меня очень странная проблема. Я могу добавить UserStudy в коллекции для пользователей и исследований, но другая сторона отношения никогда не работает. Каждый раз, когда я его устанавливаю, я не получаю никаких ошибок, и отношения просто нулевые.

  1. Я уже создал тестовый проект, используя одинаковый код, он работает там по какой-то причине, но не в моем году старого проекте (большой кодовый я не могу просто мусор)
  2. Я уже очищенный
  3. Я уже удалил производные данные
  4. Я попытался установить отношения, используя точечный аксессуар, настройщик удобства и используя setValue: ForKey.
  5. Я проверил, что все обратные отношения правильно установлены.
  6. Я проверил, что отношения являются «один ко многим» на сторонах «Пользователь» и «Исследование», и «один к одному» на стороне UserStudy.

код, где я пытаюсь установить отношения выглядит следующим образом:

CRMUser *aUser = [NSEntityDescription insertNewObjectForEntityForName:@"CRMUser" 
               inManagedObjectContext:self.ctx]; 
CRMStudy *aStudy = [NSEntityDescription insertNewObjectForEntityForName:@"CRMStudy" 
               inManagedObjectContext:self.ctx]; 
CRMUserStudy *aUserStudy = [NSEntityDescription insertNewObjectForEntityForName:@"CRMUserStudy" 
                 inManagedObjectContext:self.ctx]; 
aUserStudy.study = aStudy; 
aUserStudy.user = aUser; 

STAssertTrue([aUserStudy.user isEqual:aUser], @"newUserStudyWithUser:study:token failed to set user"); 
STAssertTrue([aUserStudy.study isEqual:aStudy], @"newUserStudyWithUser:study:token failed to set study"); 

NSLog(@"aUserStudy: %@",aUserStudy); 

Который всегда терпит неудачу, и дает мне этот журнал:

aUserStudy: <CRMUserStudy: 0xa6db8e0> (entity: CRMUserStudy; id: 0xa6dc580 <x-coredata:///CRMUserStudy/t1BDB3E8A-F5F0-4462-AB88-C5186AC4D8C671> ; data: { 
    study = nil; 
    token = nil; 
    user = nil; 
}) 

Но если я:

CRMUser *aUser = [NSEntityDescription insertNewObjectForEntityForName:@"CRMUser" 
               inManagedObjectContext:self.ctx]; 
CRMStudy *aStudy = [NSEntityDescription insertNewObjectForEntityForName:@"CRMStudy" 
               inManagedObjectContext:self.ctx]; 
CRMUserStudy *aUserStudy = [NSEntityDescription insertNewObjectForEntityForName:@"CRMUserStudy" 
                 inManagedObjectContext:self.ctx]; 
[aUser addUserStudyObject:aUserStudy]; 
[aStudy addUserStudyObject:aUserStudy]; 

Отношения установлены, но все еще ноль с другой стороны.

Как я уже сказал, я могу скопировать код моей модели в новый проект, и все работает нормально. Кто-нибудь когда-либо испытывал это? Может быть, это как-то связано с тестовой целью?

+0

Есть ли у вас какие-либо миграции в этом проекте?Если вы уверены, что миграция, которая имеет правильные отношения, установлена ​​как текущая версия модели –

+0

никаких миграций, это приложение не увидело выпуск продукта, поэтому мы просто удаляем установку при смене модели. –

+0

Вы проверяете обратную связь? От изучения до пользователя? – brianLikeApple

ответ

1

Я до сих пор не знаю, какова была конкретная причина этой проблемы, я предполагаю, что мой файл .xcdatamodeld каким-то образом был поврежден.

Я уже пробовал удалить объект UserStudy и воссоздать его, не повезло.

Затем я создал новую версию модели.
Я НЕ устанавливал эту новую версию как текущий по умолчанию. Это не устранило проблему.

Затем я снова удалил и воссоздал объект UserStudy.
Внезапно все началось.

Так что я предполагаю, что создание новой версии модели вызвало XCode для регенерации файлов моей модели и исправления любого искажения, вызывающего проблему. Обратите внимание, что я использовал diff для старого файла модели и нового, и ничто не кажется другим, поэтому я не понимаю, какова фактическая проблема, кроме того, что модель каким-то образом была повреждена.