On Sep 29, 2011, at 02:42 , David Mirabito wrote:

> My understanding is that because of 'preparesContent=YES' it manages the 
> array internally, which i get at with the [myController content].

Not quite so. Array controllers *always* manage a (separate) array, or an array 
property if configured via bindings. That's because it's a *controller*, while 
the array is a data model (respectively, the C and M of the MVC design 
pattern). The two things have different roles, so are always distinct.

'preparesContent=YES' is an option that tells the array controller that it is 
responsible for creating the data model. When specified with NSObjectController 
(NSArrayController's superclass), it creates an object of the class configured 
into the controller. When specified with NSArrayController, it creates an array 
for you, and (as you've seen) populates it with a single object of the 
configured class.

> The only odd thing is that there is always a single, default item there when 
> a new document is created. 

> So apparently the NIB loading machinery is creating a new expense object and 
> placing it into the ArrayController's content? Why would this be so? The 
> object behaves just like any other, in that I can edit it in the tableview 
> and/or remove via a button wired to [myArrayController remove:].
> 
> Ideally the array should be completely empty in a new document, and is up to 
> the user's interaction to place the first object. What must I do to avoid 
> this auto-creation of the object?

Just specify 'preparesContent=NO'. Unless you have an application where it 
would make sense for a new document to start off with a single generic array 
element (and I'm having trouble thinking of an example), you don't want or need 
this option to be set.

There are a couple of cases where the option can *perhaps* be useful. One is 
with a NSObjectController, which by default gets a class of NSMutableDictionary 
in IB. That is, you can actually use an object controller to manage a 
collection of objects kept in a dictionary. (This is different from using a 
NSDictionaryController.) In that case, it might save you a step to have the 
controller create the content object (dictionary) for you.

The other case is when the NSController (of any subclass) is in Entity mode for 
Core Data. In that case, the option causes a default fetch, and that might save 
you a slightly larger step that you'd otherwise have to code manually.

In general, though, it's sort of easier to ignore the "preparesContent" option, 
and just take responsibility for creating the content object yourself.


_______________________________________________

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