OK, then it seems I didn't do something fundamentally wrong. Probably a stupid mistake somewhere.
Thanks again! Martin On 28, Nov, 2010, at 10:26 AM, Stephen J. Butler wrote: > On Sun, Nov 28, 2010 at 3:15 AM, Martin Hewitson > <[email protected]> wrote: >> It 'works' for me too, I just warnings from Xcode. Anyway, I'll check in >> case I made a typo or something. > > I don't get any warnings. > > >> On 28, Nov, 2010, at 9:50 AM, Stephen J. Butler wrote: >> >>> On Sun, Nov 28, 2010 at 2:15 AM, Martin Hewitson >>> <[email protected]> wrote: >>>> Suppose I have a formal protocol which defines a method: >>>> >>>> - (NSArray*)objects; >>>> >>>> Then I implement a class which implements this protocol. To do that I make >>>> a property: >>>> >>>> @property (nonatomic, readwrite, retain) NSArray * objects; >>>> >>>> and put the appropriate synthesize statement in the implementation. >>>> >>>> I get compiler warnings that this class doesn't implement the protocol. It >>>> seems it doesn't take the synthesized getter as being an implementation of >>>> the -objects method. >>>> >>>> I also tried explicitly adding the implementation, but the warning remains: >>>> >>>> - (NSArray*) objects >>>> { >>>> return objects; >>>> } >>>> >>>> Am I doing something wrong here, or is it not possible to use a property >>>> to satisfy a protocol? >>> >>> Works for me: >>> >>> >>> #import <Foundation/Foundation.h> >>> >>> @protocol Bar >>> - (NSArray*) objects; >>> @end >>> >>> @interface Foo : NSObject < Bar > { >>> NSArray *objects; >>> } >>> @property (nonatomic, readwrite, retain) NSArray *objects; >>> @end >>> >>> @implementation Foo >>> #if 0 >>> - (NSArray*) objects { return objects; } >>> - (void) setObjects:(NSArray*)o { >>> [o retain]; >>> [objects autorelease]; >>> objects = o; >>> } >>> #else >>> @synthesize objects; >>> #endif >>> @end >>> >>> int main (int argc, const char * argv[]) { >>> NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; >>> >>> Foo *f = [[[Foo alloc] init] autorelease]; >>> id< Bar > b = f; >>> >>> f.objects = [NSArray arrayWithObjects:@"one", >>> @"two", @"three", nil]; >>> NSLog( @"objects = %@", [b objects] ); >>> >>> [pool drain]; >>> return 0; >>> } >> >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> Martin Hewitson >> Albert-Einstein-Institut >> Max-Planck-Institut fuer >> Gravitationsphysik und Universitaet Hannover >> Callinstr. 38, 30167 Hannover, Germany >> Tel: +49-511-762-17121, Fax: +49-511-762-5861 >> E-Mail: [email protected] >> WWW: http://www.aei.mpg.de/~hewitson >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> >> >> >> >> >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Martin Hewitson Albert-Einstein-Institut Max-Planck-Institut fuer Gravitationsphysik und Universitaet Hannover Callinstr. 38, 30167 Hannover, Germany Tel: +49-511-762-17121, Fax: +49-511-762-5861 E-Mail: [email protected] WWW: http://www.aei.mpg.de/~hewitson ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _______________________________________________ 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]
