Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标C-无法设置委托错误-找不到';myNSObjectClassDelegate';_Ios_Objective C_Delegates - Fatal编程技术网

Ios 目标C-无法设置委托错误-找不到';myNSObjectClassDelegate';

Ios 目标C-无法设置委托错误-找不到';myNSObjectClassDelegate';,ios,objective-c,delegates,Ios,Objective C,Delegates,我刚开始与代表一起工作 出于某种原因,我不能这样做,我看到了错误 我试着在一个新项目上编写下一个代码,这是可以的,但是当我把这段代码转移到我的主项目时,我遇到了一些问题 我的NSObject类.h: @protocol myNSObjectClassDelegate <NSObject> @required -(void)doSomething; @end @interface GeneralMethods : NSObject @property (nonatomic,s

我刚开始与
代表一起工作

出于某种原因,我不能这样做,我看到了错误

我试着在一个新项目上编写下一个代码,这是可以的,但是当我把这段代码转移到我的主项目时,我遇到了一些问题

我的
NSObject
.h

@protocol myNSObjectClassDelegate <NSObject>

@required
-(void)doSomething;

@end


@interface GeneralMethods : NSObject

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

@end
my
UIViewController
.h

#import "GeneralMethods.h"

@interface view : UIViewController<UIGestureRecognizerDelegate,
                                   UINavigationControllerDelegate,
                                   UIImagePickerControllerDelegate,
                                   myNSObjectClassDelegate>
我做错了什么

编辑:我想: 出于某种原因,在我的
NSObject
类中,如果在此之后移动
#import myUIViewcontroller

@protocol myNSObjectClassDelegate <NSObject>

@required
-(void)doSomething;

@end
@协议myNSObjectClassDelegate
@必需的
-(无效)剂量测定;
@结束

问题已解决。

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

例:

#导入“FileWithProtocol.h”
@接口MyClass
...
@结束

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

@protocol MyNSObjectClassDelegate;
以前

@interface ...

我们看不到所有的代码,但在阅读了更多的交换之后,看起来依赖项可能是无序添加的。我建议将协议移动到它自己的文件中,并将其导入到所有使用它的地方。这样,您肯定会按照您期望的顺序导入内容

除此之外,以下财产声明:

@property (nonatomic,strong) id<myNSObjectClassDelegate> delegate;
现在,如果这种关系在两方面都很牢固,那么从所有拥有它的人那里释放父母将不足以释放它,因为它的孩子也与它有一种拥有关系

此外,您还可以省略以下内容:

@synthesize delegate;

“自动属性合成”会使此功能过时。

与您的问题无关,但您最好将类和协议名称大写。这是一个常规惯例一般来说,您不应该维护与委派协议的
关系。我不确定-虽然他没有实际展示它,但他视图控制器的
.m
文件应该导入相应的
.h
文件,它确实包含协议的导入。如果他在实现文件中导入它,头文件仍然无法找到它。对,我是说-头文件应该导入协议。(在他的代码片段中似乎已经有了。)并且实现文件应该导入头。OP的类名令人困惑,但似乎
view.h
应该导入
GeneralMethods.h
,而
view.m
应该导入
view.h
。但他似乎已经这样做了……编译器仍然会警告未声明的协议。但他已经在他的代码片段中导入了协议文件,在#import“GeneralMethods.h”中。不管怎样,他解决了。。。
@interface ...
@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)
@synthesize delegate;