Well, thanks Dave, Hunter, Richard and the rest.

I followed each of your suggestions, and I finally found the culprit. 

A single binding, rather a nifty one, which I don’t know how to do better — 
Maybe you can help.  Removing this binding (alas losing functionality) window 
opens instantly, regardless of the number of items.

First off — the issue is NOT in any of the table columns. They do have 
complicated bindings, but all work fast and fine.

In the .xib  there is also a custom view, only used as an accessory view to an 
NSAlert dialog, when user choses to perform special editing on the items 
displayed. (Kind of search-and-replace action).

In that view, there’s a popup button, populated by binding to a (quite special) 
array controller. That array controller’s content-array has the binding that 
breaks window loading.

I’ll try to explain: 

This NSTable in the window displays a list of all “Measurement” entities 
related to a specific “Sample” (the “representedObject” of the File’s owner). 
For that I have a “Measurements Array Controller” in “Entity” mode, whose 
content array is bound to File’s Owner’s “representedObject.measurements” 
relation. All table columns are bound to that array controller.

Now each Measurement is connected via to-one relation to a “Species” entity. 

In my custom view,  I wish to populate a popup button with all the Species 
entities which appear in the displayed Measurements.

For that, I created the “Used Species Array Controller” whose section in the 
.xib appears below:


<arrayController mode="entity" entityName="Species" editable="NO" 
automaticallyPreparesContent="YES" preservesSelection="NO" 
selectsInsertedObjects="NO" avoidsEmptySelection="NO" 
clearsFilterPredicateOnInsertion="NO" automaticallyRearrangesObjects="YES" 
id="syR-1c-VXy" userLabel="Used Species Array Controller">
    <connections>
BAD:  <binding destination="4l9-1K-ojl" name="contentArray" 
keyPath="arrangedObjects.@distinctUnionOfObjects.species" id="TQk-n5-RYc”/>
           <binding destination="-2" name="managedObjectContext" 
keyPath="representedObject.managedObjectContext" id="Vqg-dg-DdM"/>
           <binding destination="xYM-bl-Wzq" name="sortDescriptors" 
keyPath="sortDescriptors" id="3uW-GQ-bKN"/>
    </connections>
 </arrayController>
 

The “Bad” binding destination, is the Measurements Array Controller’s 
“arrangedObjects”, and the model keyPath is “@distinctUnionOfObjects.species”

Effectively, when calculated, this “collects” all the species from all 
displayed measurements, removing any duplicates. Nifty, isn’t it?

I can’t provide the list statically, in advance, because the user is free to 
replace the species of displayed measurements - and although this is rather 
“heavy” binding - I can’t see anything “recursive” about it, or otherwise 
iteratively-dependent. I would guess this ArrayController should “Prepare” its 
content array once - and forget about it, until time any of the Measurements 
(arrangedObjects) mutate.

I know this isn’t easy to grasp… but any idea for how to improve this will be 
greatly appreciated.

Thanks again! 

Motti Shneor
---
Ceterum censeo Microsoftinem delendam esse


> On 4 Nov 2018, at 21:41, Dave Fernandes <dave.fernan...@utoronto.ca> wrote:
> 
> 
> 
>> On Nov 4, 2018, at 2:24 PM, Motti Shneor <motti.shn...@me.com> wrote:
>> 
>> Hi Dave and thanks for the reply.
>> 
>> As you can see in the stack - there isn’t actually any “code” per-se that 
>> runs at that time. Here is the actual method that fails:
>> 
> 
>> As for modifying the persistent store - I guess I don’t because the 
>> database-document does not become “dirty”. If I double click one of the 
>> “sample” entities that can be open - and the window is shown as expected, 
>> then I close the document - there are no autosaves or changes recorded. The 
>> modification time of the persistent store does not change.
>> 
>> However - you’re right to point at 
>> NSManagedObjectContextDidChangeNotification — how could I get it to pop? 
> 
> Set up an observer for that notification for your MOC and set a breakpoint in 
> that observer.
> 
>> 
>> 3 of my NSTableColumn do have a formatter for the number presented - but why 
>> should this affect the context, The columns are not “editable” in-place. 
> 
> Just trying to narrow this down without assuming too much.
> 
>> 
>> I will attempt to delete these columns and try again… 
>> 
> 

_______________________________________________

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

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

Reply via email to