我有这个课,我在.h
上有这样的东西@interface myClass : UIImageView <UIGestureRecognizerDelegate>{
@public id referenceOne;
@public id referenceTwo;
}
@property (nonatomic,retain) id referenceOne;
@property (nonatomic,retain) id referenceTwo;
on .m我有
@synthesize referenceOne, referenceTwo;
此类没有委托协议。
我有其他基于此类的课程。对于其中一个类,我已经定义了一个委托协议,并且我的实现文件如下:
@protocol MyBasedClassDelegate <NSObject>
@optional
- (void) doStuff;
@end
@interface MyBasedClass : myClass {
id<MyBasedClassDelegate> _delegate;
}
@property(nonatomic,assign) id<MyBasedClassDelegate> delegate;
和.m我有
@synthesize delegate;
一旦我定义了这个MyBasedClassDelegate,该类就停止看到继承自myClass的referenceOne和referenceTwo ids。现在Xcode说这些都没有声明。如果我禁用协议,它会再次看到引用。
为什么会这样,我该如何解决?
感谢。
答案 0 :(得分:2)
您在此处有错误:
@interface MyBasedClass : myClass {
id<MyBasedClassDelegate> _delegate;
}
重命名为
@interface MyBasedClass : myClass {
id<MyBasedClassDelegate> delegate;
}
OR
做@synthesize delegate = _delegate;代替
编辑:
适合我
myClass.h
#import <Foundation/Foundation.h>
@interface myClass : UIImageView <UIGestureRecognizerDelegate> {
id referenceOne;
id referenceTwo;
}
@property (nonatomic,retain) id referenceOne;
@property (nonatomic,retain) id referenceTwo;
@end
myClass.m
#import "myClass.h"
@implementation myClass
@synthesize referenceOne, referenceTwo;
@end
MyBasedClass.h
#import <Foundation/Foundation.h>
#import "myClass.h"
@protocol MyBasedClassDelegate <NSObject>
@optional
- (void) doStuff;
@end
@interface MyBasedClass : myClass {
id<MyBasedClassDelegate> delegate;
}
@property(nonatomic,assign) id<MyBasedClassDelegate> delegate;
@end
MyBasedClass.m
#import "MyBasedClass.h"
@implementation MyBasedClass
@synthesize delegate;
-(void) dosmth {
referenceOne = nil;
}
@end
答案 1 :(得分:1)
如果您将变量名称“_delegate”更改为“委托”,我认为它可能会起作用。 (或者,注释掉合成行,它也应该有用)。
我今天早些时候遇到了类似的事情 - 如果你合成了不存在的实例变量的属性,编译器不会抱怨但是由于某种原因你不能再看到超类的变量了。