Objective C - 无法设置委托错误 - 找不到'myNSObjectClassDelegate'的协议声明

时间:2014-10-09 15:57:14

标签: ios objective-c delegates

我刚开始使用delegates

由于某些原因我无法做到,我看到了错误。

我尝试在新项目上执行下一个代码并且没关系,但是当我将此代码移动到我的主项目时,我遇到了一些问题。

我的NSObject.h

@protocol myNSObjectClassDelegate <NSObject>

@required
-(void)doSomething;

@end


@interface GeneralMethods : NSObject

@property (nonatomic,strong) id<myNSObjectClassDelegate> delegate;

@end

我的NSObject.m

@synthesize delegate;

-(void)SomeMethod {
    if ([delegate respondsToSelector:@selector(doSomething)]) {
        [delegate doSomething];
    }
}

我的UIViewController .h

#import "GeneralMethods.h"

@interface view : UIViewController<UIGestureRecognizerDelegate,
                                   UINavigationControllerDelegate,
                                   UIImagePickerControllerDelegate,
                                   myNSObjectClassDelegate>

错误发生在.h - Cannot find protocol declaration for 'myNSObjectClassDelegate'

我的UIViewController .m

-(void)doSomething{
}

我做错了什么?

编辑:我明白了: 出于某种原因,在我的NSObject课程中,如果我在此之后移动#import myUIViewcontroller

@protocol myNSObjectClassDelegate <NSObject>

@required
-(void)doSomething;

@end
问题解决了。

3 个答案:

答案 0 :(得分:2)

我们无法看到所有代码,但在阅读了更多的交换后,看起来依赖关系可能会无序添加。我建议将协议移动到自己的文件中,并将#import导入到使用它的所有地方。这样你肯定会按照你期望的顺序导入东西。

除此之外,还有以下属性声明:

@property (nonatomic,strong) id<myNSObjectClassDelegate> delegate;

代表们应该被宣布为弱者,而不是强者。

@property (nonatomic,weak) id<myNSObjectClassDelegate> delegate;

原因是避免保留周期/内存泄漏。通常情况下,虽然并非总是这种关系如下:

Parent Object (usually Controller) -----STRONG----->  Child (View often)
View Thing ----WEAK--------> delegate (actually the Parent Object)

现在,如果两种方式的关系都是STRONG,那么从拥有它的所有人那里释放父母将不足以释放它,因为它的孩子也与它拥有自己的关系。

您也可以省略:

@synthesize delegate;

自动属性合成使此过时。

答案 1 :(得分:1)

确保将NSObject.h.文件导入UIViewController的{​​{1}}文件(或您声明协议的任何位置)。就目前而言,您尚未导入声明协议的标头,因此您的视图控制器无法知道它是否存在。

例如:

.h

答案 2 :(得分:-1)

在视图控制器.h文件中,尝试添加以下行:

@protocol MyNSObjectClassDelegate;

@interface ...