Не удается найти объявление протокола для «MyObjectViewDelegate», когда он ЯСНО там? 1 - PullRequest
6 голосов
/ 24 марта 2011

У меня есть такой класс ..

#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

ПОЧЕМУ он вдруг сообщает, что он Не удается найти объявление протокола для 'MyObjectAddViewDelegate' , когда я явно импортирую икласс @ для которого определен протокол?Вот как 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

Все выглядит идеально настроенным, и я не вижу циклического импорта ?!Любые предложения, почему он не видит определение протокола в MyObjectAddView?

Спасибо.

Ответы [ 2 ]

8 голосов
/ 24 марта 2011

Вам не нужна прямая ссылка на класс после того, как вы импортировали заголовок для этого класса. Только когда вы делаете прямую ссылку, вы планируете включить заголовок внутри файла реализации. Удалите @class MyObjectAddView и если это исправит, дайте мне знать, если нет, у меня может быть другое решение для вас.

6 голосов
/ 07 февраля 2013

Обобщение обсуждения: еще одно решение - проверка циклического импорта между реализацией делегата и объявлением протокола Это решило мою проблему.

...