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
Post a Comment