On Jun 6, 2015, at 14:35 , Cosmo <minonom...@gmail.com> wrote:
> 
> Can somebody explain to me why I’m getting this different behavior. Is there 
> anything I can do to achieve my goal?

The most likely immediate reason is that the class returned by '[self 
classToUseForBackend]’ doesn’t actually implement a method called 
‘errorMessageForCode:’. If you think it does, check the spelling and 
capitalization of the method name in the subclass.

However, the code fragments you show here don’t make any sense. Class methods 
in Obj-C (methods with a ‘+’) have inheritance like instance methods. So, if a 
subclass implements (say) ‘logout’, execution is never going to reach the 
superclass implementation. If a subclass *doesn’t* implement (say) 
‘errorMessageForCode:’, you’re going to get an infinite loop.

Furthermore, if the subclass method happens to call the ‘super’ method, then 
you will again end up with an infinite loop.

If your intention is to have a class hierarchy where the base class defines 
methods that the subclass must implement — that is, where the base class has 
abstract methods — there are two straightforward ways:

1. Define the base class method but don’t do anything in it, except possibly to 
cause an exception:

        + (void) logout {
                NSAssert (NO, @“Subclass responsibility”);
        }

2. Use a protocol instead of a base class:

        @protocol BaseClassProtocol
                + (void) logout;
        @end



_______________________________________________

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