On 23 Feb 2010, at 6:19, Quincey Morris wrote:

>> Adding is via a button going to an Employee array controller's -add. In the 
>> interface there are 2 array controllers (1 for Departments, 1 for 
>> Employees). The Employees controller is set to use the selection in the 
>> Departments controller (i.e. showing the subset belonging to the selected 
>> dept).
> 
> You haven't actually told us the whole story. Calling the Employee array 
> controller's 'add:' method causes a new Employee object to be created with 
> default attributes and no relationships -- no Department. That means the code 
> to assign it to a Department is elsewhere.

Sorry perhaps I didn't make myself clear. The button calls -add on an Employee 
array controller (standard NSArrayController), whose content set is bound to 
controller key "selection" and model key path "employees" of another standard 
array controller, containing Departments. So when the button tells the Employee 
controller to add a new employee, it adds it to the selected Department. i.e. 
standard Core Data demo stuff. So a new employee is automatically belonging to 
a department (the selected one in the GUI when the button was hit).

The Employee -awakeFromInsert isn't doing anything wacky, and doesn't touch the 
"department" attribute (it just calls super and then sets a data attribute to 
"today"). There is no -awakeFromFetch in Employee as nothing custom needs to be 
done upon fetching an Employee object.

Neither the Department nor Employee classes actually do any setting of 
attributes (i.e. nothing in my code is setting the specific Department for an 
Employee, nor which Employees belong to a Department). All that is being done 
by standard IB / Bindings methods (which I'm not overriding / subclassing). And 
as I say, if I look in the XML store after I have quit, all is well and 
properly hooked up (on each side).

If there's anything I'm missing out telling you here, by all means shout but I 
can't think of anything I'm withholding.

>> Adding and deleting Departments and Employees is fine (everything gets 
>> hooked up / added / deleted properly), and if I look in the XML Core Data 
>> store, all is well. It's just my custom accessors (the 4 mentioned below) 
>> don't get used, whereas -setEmployees does.
> 
> If you did not try this already, set a breakpoint inside 'setEmployees:'. 
> When you hit it, type the debugger command 'po [self class]' in the Xcode 
> console window to find out the actual class of the Department object.

It tells me it's a Department object :)

>> Do you reckon it's because the adding is happening from the Employee side of 
>> things rather than the Department side of things? Shouldn't both sides have 
>> their accessor methods called (thanks to the inverse relationship)?
> 
> There are no "sides" as far as adding objects is concerned. There are "sides" 
> when you talk about establishing relationships, but we don't know how you do 
> this yet. Also, the puzzle here is not whether accessor methods are being 
> called, but which accessor methods are being called. The setter, for a 
> to-many property, is kind of the worst-case fallback accessor, and KVC should 
> prefer the more nuanced add/remove accessors if they are available.
> 
>> I can't believe it's relevant, but the Department's 'employees' relationship 
>> is mandatory, as is the inverse relationship.
> 
> No, it's not relevant -- such validation requirements are checked only when 
> the Core Data store is about to be saved.

These last 2 theories were what I presumed, but you know how desperate the 
theories start to become after a while :)

Thanks again for your help and time,
Ken

. . . . . . . . . . . . . . . . . . . . . . . . . . .
Dr. Ken Tabb
Mac & UNIX programmer
Neural network & computer vision researcher
University of Hertfordshire, UK

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to