Many thanks for your reply. I have a model object and a view object - DataList 
and DataListView. DataList has a -content array. The DataListView has an array 
controller whose contentArray is bound to the DataList's content array. Given 
that it is the view that observes the model, I have implemented 
-insertObject:inContentAtIndex: and -removeObjectFromContentAtIndex: in the 
*view* object, and in these methods it sets itself up as an observer for newly 
added list objects. This works fine when there is only one data list view. But 
if there are two views that both use the same DataList object's -content array, 
this means that each view is *only* set up to observe items that *it* adds; it 
will not observe items added by the other view. So, the second view won't 
notice when the first view adds another item to their shared content array and 
therefore won't update until you, say, sort the table, and then it won't 
observe any changes made to that object, either.

If I move the -insertObject:inContentAtIndex: etc methods to the model object, 
though, then I can't add the view as an observer to the inserted objects as the 
model knows nothing of the views. Unless I need to implement these methods in 
both the view *and* the model, the view's implementation calling the model's 
version of these methods... Given that both the view and the model have a 
-content array (the view's -content array is just a retained pointer to the 
model's -content array), maybe this is what I need to do?

As I say, my aim here is to have the same content array used in two table views 
that update so that they are identical when either manipulates the underlying 
data, to account for the situation where the user may create a split view in my 
app with the same table list open in both panes.

Thanks again and all the best,
Keith

----- Original Message ----
From: Adam P Jenkins <[EMAIL PROTECTED]>
To: Keith Blount <[EMAIL PROTECTED]>
Cc: [email protected]
Sent: Thursday, February 28, 2008 2:27:06 AM
Subject: Re: Table views with different NSArrayControllers sharing the same 
data object...


If 
the 
content 
array 
is 
itself 
a 
property 
of 
another 
object, 
and 
the  
object 
containing 
the 
array 
property 
has 
indexed 
accessors 
for 
the  
array 
property, 
then 
observers 
of 
the 
array 
property 
will 
be 
notified  
of 
objects 
being 
added, 
removed 
or 
replaced 
in 
the 
array 
in 
addition  
to 
the 
whole 
array 
being 
replaced.  
 
So 
for 
example 
if 
you 
had 
a  
Course 
class 
with 
a 
"students" 
property, 
and 
you 
wrote 
indexed  
accessors 
for 
the 
students 
property, 
then 
observers 
of 
a 
Course  
object's 
students 
property 
would 
be 
notified 
if 
students 
are 
added 
or  
deleted.  
So 
you 
could 
setup 
an 
observer 
to 
add 
observers 
for 
newly  
added 
student 
objects.

See 
here 
for 
more 
info 
on 
indexed 
accessors: 
http://developer.apple.com/documentation/Cocoa/Conceptual/KeyValueCoding/Concepts/AccessorConventions.html



On 
Feb 
27, 
2008, 
at 
7:34 
PM, 
Keith 
Blount 
wrote:

> 
Hi,
>
>
>
>
> 
I'm 
in 
the 
process 
of 
putting 
together 
a 
small 
list 
view 
based 
on 
an  
> 
NSTableView. 
It's 
pretty 
simple 
- 
just 
a 
table 
of 
data 
using 
an  
> 
NSArrayController, 
with 
a 
data 
object 
that 
provides 
the 
array.  
> 
However, 
in 
my 
app 
it 
is 
possible 
that 
the 
view 
may 
appear 
in 
a  
> 
split 
view 
with 
a 
copy 
of 
itself 
in 
the 
other 
view 
(if 
the 
user 
has  
> 
split 
the 
view 
and 
selected 
the 
same 
list 
view 
for 
both 
views). 
This  
> 
means 
that, 
if 
the 
user 
makes 
edits 
to 
the 
table 
in 
one 
view, 
it  
> 
should 
automatically 
be 
updated 
in 
the 
table 
in 
the 
other 
view.
>
>
>
>
> 
What 
is 
the 
best 
way 
of 
setting 
this 
up? 
What 
I've 
tried 
so 
far 
is  
> 
less 
than 
perfect. 
I 
bind 
both 
views/table 
controllers 
to 
the 
same  
> 
underlying 
data 
object 
(array). 
My 
-setContent: 
method 
in 
my 
view  
> 
object 
sets 
up 
observers 
on 
all 
the 
objects 
in 
that 
array. 
Still,  
> 
when 
-addObject: 
gets 
called 
on 
one 
of 
the 
tableControllers, 
this  
> 
adds 
an 
object 
that 
the 
other 
table 
controller 
(controlling 
the  
> 
other 
view) 
doesn't 
know 
about... 
Obviously, 
when 
-adObject 
gets  
> 
called, 
-setContents: 
isn't 
called 
(because 
the 
controller's 
content  
> 
array 
isn't 
actually 
changed) 
so 
the 
other 
view 
doesn't 
get 
updated.
>
>
>
>
> 
Essentially, 
I 
want 
my 
two 
table 
views 
to 
act 
much 
as 
two 
text 
views  
> 
would 
that 
share 
the 
same 
underlying 
text 
storage. 
If 
anyone 
could  
> 
give 
me 
advice 
on 
the 
best 
way 
to 
achieve 
this, 
I 
would 
be 
very  
> 
grateful.
>
>
>
>
> 
Many 
thanks 
and 
all 
the 
best,
>
> 
Keith
>
>
>
>
>  
  
  
 
> 
____________________________________________________________________________________
> 
Looking 
for 
last 
minute 
shopping 
deals?
> 
Find 
them 
fast 
with 
Yahoo! 
Search.  
http://tools.search.yahoo.com/newsearch/category.php?category=shopping
> 
_______________________________________________
>
> 
Cocoa-dev 
mailing 
list 
([email protected])
>
> 
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/adam%40thejenkins.org
>
> 
This 
email 
sent 
to 
[EMAIL PROTECTED]






      
____________________________________________________________________________________
Looking for last minute shopping deals?  
Find them fast with Yahoo! Search.  
http://tools.search.yahoo.com/newsearch/category.php?category=shopping
_______________________________________________

Cocoa-dev mailing list ([email protected])

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 [EMAIL PROTECTED]

Reply via email to