Re: +bundleForClass: category question

2012-07-21 Thread Uli Kusterer
On 16.07.2012, at 04:30, Graham Cox wrote:
 If I create a category on a standard framework class as part of another 
 framework, and I use +[NSBundle bundleForClass:] to load an image resource 
 for use by that category, does that work, i.e. does it load the bundle of the 
 framework containing the category, or the bundle containing the original 
 class being extended?


 You'll always get the bundle where the class was originally defined, not your 
category's. A workaround that I occasionally do in categories is that I define 
a dummy anchor class next to the category and call -bundleForClass: on that. 
Very useful for code that is used on iOS (there are no frameworks) and on the 
Mac (in a framework). It'll always grab the bundle to which someone added that 
source file, and the assumption is whoever did that also copied along the 
resources.

-- Uli Kusterer
The Witnesses of TeachText are everywhere...
http://www.masters-of-the-void.com




___

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


Re: +bundleForClass: category question

2012-07-16 Thread Jens Alfke

On Jul 15, 2012, at 8:29 PM, David Duncan david.dun...@apple.com wrote:

 The category is a method on the class you specify, therefore [self class] 
 will be that class (whatever it is) and you will get the bundle for that 
 class. In this case, it means your bundle will be the framework bundle.

That's an ambiguous answer since Graham's got his own framework too.

The answer, I think, is the _system_ framework bundle that contains the base 
implementation of the class, not Graham's framework with the category.

—Jens
___

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

Re: +bundleForClass: category question

2012-07-16 Thread Dave DeLong
The answer is simple, and it's answered by the name of the method:

-bundleForClass:

Graham's framework does not define the class.  Therefore, it is not the bundle 
that is returned from the method.  This method returns the bundle that defines 
the class.  In Graham's example, it would be the system framework.

Dave

On Jul 16, 2012, at 2:08 PM, Jens Alfke wrote:

 
 On Jul 15, 2012, at 8:29 PM, David Duncan david.dun...@apple.com wrote:
 
 The category is a method on the class you specify, therefore [self class] 
 will be that class (whatever it is) and you will get the bundle for that 
 class. In this case, it means your bundle will be the framework bundle.
 
 That's an ambiguous answer since Graham's got his own framework too.
 
 The answer, I think, is the _system_ framework bundle that contains the base 
 implementation of the class, not Graham's framework with the category.
 
 —Jens
 ___
 
 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/davedelong%40me.com
 
 This email sent to davedel...@me.com

___

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

Re: +bundleForClass: category question

2012-07-16 Thread Graham Cox

On 17/07/2012, at 7:15 AM, Dave DeLong wrote:

 The answer is simple, and it's answered by the name of the method:
 
 -bundleForClass:
 
 Graham's framework does not define the class.  Therefore, it is not the 
 bundle that is returned from the method.  This method returns the bundle that 
 defines the class.  In Graham's example, it would be the system framework.


That was my assumption, so the answer was what I expected. But I also wondered 
whether it was possibly a bit smarter and used the full category name as the 
class name.

What I'm trying to do is to add a couple of cursors to NSCursor using a 
category which are created by loading images from the framework's resources. 
Unfortunately it doesn't work when implemented in a simple way because 
+bundleForClass returns the bundle containing NSCursor. Instead I have to 
declare an intermediate class that loads the image resource for me - I was just 
hoping to avoid that extra step but seems not.

--Graham


___

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


Re: +bundleForClass: category question

2012-07-16 Thread Kyle Sluder
On Tue, Jul 17, 2012, at 11:02 AM, Graham Cox wrote:
 
 What I'm trying to do is to add a couple of cursors to NSCursor using a
 category which are created by loading images from the framework's
 resources. Unfortunately it doesn't work when implemented in a simple way
 because +bundleForClass returns the bundle containing NSCursor. Instead I
 have to declare an intermediate class that loads the image resource for
 me - I was just hoping to avoid that extra step but seems not.

Since the identifier of the bundle is known at compile time, we have a
compile-time define that we use whenever we need to provide an NSBundle
in a situation like this:
https://github.com/omnigroup/OmniGroup/blob/master/Frameworks/OmniBase/OBUtilities.h#L64

Basically, we define OMNI_BUNDLE_IDENTIFIER in the Xcode project, use
the Preprocess Info.plist option to insert it into the
CFBundleIdentifier property, and use OMNI_BUNDLE whenever we need to
provide a this-bundle-relative NSBundle argument. OMNI_BUNDLE
essentially expands to [NSBundle bundleWithIdentifier:OMNI_BUNDLE].

--Kyle Sluder
___

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


Re: +bundleForClass: category question

2012-07-16 Thread Jens Alfke

On Jul 16, 2012, at 6:02 PM, Graham Cox graham@bigpond.com wrote:

 What I'm trying to do is to add a couple of cursors to NSCursor using a 
 category which are created by loading images from the framework's resources. 
 Unfortunately it doesn't work when implemented in a simple way because 
 +bundleForClass returns the bundle containing NSCursor. Instead I have to 
 declare an intermediate class that loads the image resource for me - I was 
 just hoping to avoid that extra step but seems not.

Why not just make a subclass of NSCursor and put the accessor methods on that? 
It's safer than a category since you don't run the risk of colliding with a 
method name added by another framework/bundle in the same process, or by a 
future version of NSCursor itself.

—Jens
___

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

Re: +bundleForClass: category question

2012-07-15 Thread David Duncan
On Jul 15, 2012, at 7:30 PM, Graham Cox graham@bigpond.com wrote:

 If I create a category on a standard framework class as part of another 
 framework, and I use +[NSBundle bundleForClass:] to load an image resource 
 for use by that category, does that work, i.e. does it load the bundle of the 
 framework containing the category, or the bundle containing the original 
 class being extended?


The category is a method on the class you specify, therefore [self class] will 
be that class (whatever it is) and you will get the bundle for that class. In 
this case, it means your bundle will be the framework bundle.
--
David Duncan


___

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


Re: +bundleForClass: category question

2012-07-15 Thread Graham Cox

On 16/07/2012, at 1:29 PM, David Duncan wrote:

 In this case, it means your bundle will be the framework bundle.


Just to be clear, you mean the bundle for the *original* framework (AppKit, 
say) and not my framework which contains the category?

--Graham


___

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


Re: +bundleForClass: category question

2012-07-15 Thread David Duncan
On Jul 15, 2012, at 9:07 PM, Graham Cox graham@bigpond.com wrote:

 
 On 16/07/2012, at 1:29 PM, David Duncan wrote:
 
 In this case, it means your bundle will be the framework bundle.
 
 Just to be clear, you mean the bundle for the *original* framework (AppKit, 
 say) and not my framework which contains the category?

Yup.
--
David Duncan


___

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