Cannot find protocol declaration for 'MyObjectViewDelegate' when it is CLEARLY there ?1

12,539

Solution 1

You do not need a forward reference to a class after you have imported the header for that class. Only time you do a forward reference is if you plan on including the header inside of the implementation file. Remove @class MyObjectAddView and if that fixes it let me know if not I may have another solution for you.

Solution 2

Synthesizing the discussion: another solution is to check for cyclical imports between the delegate implementation and protocol declaration. This solved my issue.

Share:
12,539
skålfyfan
Author by

skålfyfan

code. automation. arsenal. golf. rukki.

Updated on August 15, 2022

Comments

  • skålfyfan
    skålfyfan over 1 year

    I have a class like this..

    #import "MyObjectAddView.h"
    #import "MyAppDelegate.h"
    
    #define myAppDelegate (MyAppDelegate *) [[UIApplication sharedApplication] delegate]
    
    @class MyObjectAddView;
    
    @interface AccountViewController : UIViewController <UIScrollViewDelegate, MyObjectAddViewDelegate, UIImagePickerControllerDelegate> {
    
        MyObjectAddView *myAddView;
        .....
    }
    
    @property (nonatomic, retain) IBOutlet MyObjectAddView *myAddView;
    
    - (id) initWithSettings:(SettingsObject *)settings;
    
    @end
    

    WHY is it suddenly telling me that it Cannot find protocol declaration for 'MyObjectAddViewDelegate' when I'm clearly importing and including the @class for where the protocol is defined? Here how MyObjectAddView setup:

    #import <UIKit/UIKit.h>
    #import "MyAppDelegate.h"
    
    #define myAppDelegate (MyAppDelegate *) [[UIApplication sharedApplication] delegate]
    
    @protocol MyObjectAddViewDelegate;
    
    @interface MyObjectAddView : UIView <UITextFieldDelegate> {
    
    @private
        id <MyObjectAddViewDelegate> delegate;
        ....    
    @public
        .....
    }
    
    @property(nonatomic, assign) id <MyObjectAddViewDelegate> delegate;
    .....
    
    @end
    
    @protocol MyObjectAddViewDelegate <NSObject>
    // expense == nil on cancel
    - (void)myObjectAddViewDidFinish:(MyObjectAddView *)addView;
    
    @end
    

    Everything seems perfectly setup and I don't see any circular imports ?! Any suggestions why it might not be seeing the protocol definition in MyObjectAddView?

    Thanks.