• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Core Data warning: to-many relation does not have an inverse
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Core Data warning: to-many relation does not have an inverse


  • Subject: Re: Core Data warning: to-many relation does not have an inverse
  • From: Quincey Morris <email@hidden>
  • Date: Wed, 10 Dec 2008 23:28:08 -0800

On Dec 10, 2008, at 22:36, Nathan Vander Wilt wrote:

I'm trying to port my model code to use Core Data. My model is something like this:

I have a Company. It has two to-many relationships, currentEmployees and previousEmployees which are naturally both to Employees.

Employees have a to-one relationship to the Company that is the inverse of both the currentEmployees and previousEmployees. That is, the employee (records) belong to the Company regardless of current/ previous "status".

I also have a Consultant. It has a to-many relationship to interestingEmployees. Nobody talking to an Employee needs to have access to the Consultant, so there is no inverse relationship.


I have two problems with this model. When I compile it, I get a warning:


Consultant.interestingEmployees -- to-many relationship does not have an inverse: this is an advanced setting (no object can be in multiple destinations for a specific relationship)

This error doesn't make sense to me. Is it trying to say an object can only "belong" to one to-many relationship?


The other problem is that I do want to define an inverse for Employee.company, but I can't set it to *both* Company.currentEmployees and .previousEmployees. I think the answer is to maintain the Employee.company relationship field myself without any inverse, but then I get two more warnings for each of the Company to-many relationships.

There's no compelling reason why relationships should necessarily have an inverse (and there's a build setting to turn off the warning now). You mainly have to be careful that when you delete or insert an Employee object, you make sure you adjust the non-inversed relationships to match.


Based on your description, I'd suggest having an Employees to-many relationship on Company objects, and a Company relationship on Employee objects as the inverse. Then define your other to-many relationships (currentEmployees, previousEmployees and interestingEmployees) as having no inverses. That, in practical terms, will allow you to navigate all the relationships in both directions.

You *could* use attributes instead of relationships, though this would likely mean you'd need to get hold of the subsets (like current or previous employees) via fetches. There's nothing wrong with that, except that it involves an extra step and there might be performance considerations.


_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


References: 
 >Core Data warning: to-many relation does not have an inverse (From: Nathan Vander Wilt <email@hidden>)

  • Prev by Date: Re: Problem setting a Core Data Document Icon
  • Next by Date: Re: Newbie. Creating SubViews that aren't associated with NSWindow, or NSPanel?
  • Previous by thread: Core Data warning: to-many relation does not have an inverse
  • Next by thread: Update to xcode 3.1. copystrings failing, returning error code 71?
  • Index(es):
    • Date
    • Thread