Properly declare delegation in Objective C (iPhone) -


ok, has been explained few times (i got of way there using this post on so), missing something. able compile cleanly, , able set delegate call methods delegate, i'm getting warning on build:

no definition of protocol 'detailviewcontrollerdelegate' found 

i have detailviewcontroller , rootviewcontroller only. calling method in rootviewcontroller detailviewcontroller. have delegate set so:

in rootviewcontroller.h:

#import "detailviewcontroller.h"  @interface rootviewcontroller : uitableviewcontroller <nsfetchedresultscontrollerdelegate, detailviewcontrollerdelegate> //error shows here { //some stuff here } //some other stuff here @end 

in rootviewcontroller.m define delegate when create view using detailviewcontroller.delegate = self

in detailviewcontroller.h:

@protocol detailviewcontrollerdelegate;  #import "rootviewcontroller.h"  @interface detailviewcontroller : uitableviewcontroller <uitextfielddelegate> {     id <detailviewcontrollerdelegate> delegate; }  @property (nonatomic, assign) id <detailviewcontrollerdelegate> delegate;  @end  @protocol detailviewcontrollerdelegate  //some methods reside in rootviewcontroller.m  @end 

i feel weird declaring protocol above import in detailviewcontroller.h, if don't doesn't build. said, methods called fine, , there no other errors going on. missing here?

pheelicks pretty there looks of protocol methods use detailviewcontroller class, imagine looks :

@protocol detailviewcontrollerdelegate <nsobject> - (void) controller:(detailviewcontroller *)controller hassomething:(id)thing; @end  @class detailviewcontroller : uitableviewcontroller <uitextfielddelegate> {     id <detailviewcontrollerdelegate> delegate; } @property (nonatomic, assign) id <detailviewcontrollerdelegate> delegate; @end 

and haven't defined detailviewcontroller yet error in protocol definition.

you can fix in 2 ways :

a) declare (but don't define yet) class before protocol

@class detailviewcontroller;  @protocol detailviewcontrollerdelegate <nsobject> - (void) controller:(detailviewcontroller *)controller hassomething:(id)thing; @end 

b) use uitableviewcontroller instead of detailviewcontroller in protocol methods.

@protocol detailviewcontrollerdelegate <nsobject> - (void) controller:(uitableviewcontroller *)controller hassomething:(id)thing; @end 

personally, choose solution (a) depends on you're trying do.

hope helps.


Comments

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -