我收到上述错误,但不确定如何修复它。这是我的代码:
·H:
#import <UIKit/UIKit.h>
@protocol ColorLineDelegate <NSObject>
-(void)valueWasChangedToHue:(float)hue;
@end
@interface ColorLine : UIButton {
id <ColorLineDelegate> delegate;
}
@property (nonatomic, assign) id <ColorLineDelegate> delegate;
@end
的.m:
#import "ColorLine.h"
@implementation ColorLine
@synthesize delegate;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
@end
合成行中发生错误。我找不到问题。
答案 0 :(得分:53)
使用以下语法:
@interface SomeClass : NSObject {
id <SomeClassDelegate> __unsafe_unretained delegate;
}
@property (unsafe_unretained) id <SomeClassDelegate> delegate;
答案 1 :(得分:50)
看起来您的项目可能正在使用ARC
,那么属性应该以这种方式声明:
#import <UIKit/UIKit.h>
@protocol ColorLineDelegate <NSObject>
-(void)valueWasChangedToHue:(float)hue;
@end
@interface ColorLine : UIButton
@property (nonatomic, weak) id <ColorLineDelegate> delegate;
@end
答案 2 :(得分:20)
当我在ARC项目中使用没有ARC功能的旧示例代码时,我遇到了同样的问题。您似乎不再需要将变量声明放入接口定义中。所以你的代码应该像这样工作:
H:
#import <UIKit/UIKit.h>
@protocol ColorLineDelegate <NSObject>
-(void)valueWasChangedToHue:(float)hue;
@end
@interface ColorLine : UIButton {
// Get rid of this guy!
//id <ColorLineDelegate> delegate;
}
@property (nonatomic, assign) id <ColorLineDelegate> delegate;
@end
的.m:
#import "ColorLine.h"
@implementation ColorLine
@synthesize delegate;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
@end
答案 3 :(得分:6)
也许有点晚,但要“符合ARC”,你只需要替换
@property (nonatomic, assign) id <ColorLineDelegate> delegate;
通过
@property (nonatomic, strong) id <ColorLineDelegate> delegate;
再见。
答案 4 :(得分:3)
如果你想要一个弱的属性,这也有效。
@interface MyClass : NSObject {
__weak id <MyClassDelegate> _delegate;
}
@property (nonatomic, weak) id <MyClassDelegate> delegate;
答案 5 :(得分:1)
您也可以使用
@dynamic delegate
在实现中而不是合成。