On Thu, Oct 7, 2010 at 5:14 PM, Rick Mann <[email protected]> wrote:
> I have an NSPersistentDocument-based app. I need to implement a "setNeedsFoo" 
> method on the managed object that causes the receiver to be placed into an 
> NSMutableSet on the document, for later "foo" processing. As part of being 
> added to the set, it sets a timer in the document so that this set of objects 
> gets processed.
>
> I don't see any obvious way of getting at the document. Any suggestions? 
> Thanks!

I've used this little snippet in my code for years w/o issue. It's
always felt like an extreme hack, but I couldn't tell you a better way
to do it.

I created a superclass for all of my managed objects, which is just a
subclass of NSManagedObject. That class gets one extra method:

-(MyDocument*) document {
        return [[NSApp delegate] documentForManagedObjectContext:[self
managedObjectContext]];
}

That's just a wrapper to a method defined on the delegate. Then in my
app delegate:

-(id) documentForManagedObjectContext:(NSManagedObjectContext*) context {

        for (id doc in [[NSDocumentController sharedDocumentController] 
documents]) {
                if ([doc managedObjectContext] == context) {
                        return doc;
                }
        }
        
        return nil;
        
}

Obviously, that's Leopard only due to the fast enumeration, but you
can refactor it back to an NSEnumerator easy enough if you need Tiger
support.

-Jim.....
_______________________________________________

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