'unsafe_unretained属性'委托'的现有ivar'委托'必须__unsafe_unretained

And*_*rew 31 objective-c

我收到上面的错误,但不确定如何修复它.这是我的代码:

.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
Run Code Online (Sandbox Code Playgroud)

.M:

#import "ColorLine.h"

@implementation ColorLine

@synthesize delegate;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)

错误发生在合成行中.我找不到问题了.

jan*_*nBP 54

使用以下语法:

@interface SomeClass  : NSObject {
    id <SomeClassDelegate> __unsafe_unretained  delegate;
}
@property (unsafe_unretained) id <SomeClassDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢,为我工作.哇Apple,什么语法. (3认同)

rck*_*nes 52

看起来您的项目可能正在使用,ARC那么属性应该以这种方式声明:

#import <UIKit/UIKit.h>

@protocol ColorLineDelegate <NSObject>
-(void)valueWasChangedToHue:(float)hue;
@end

@interface ColorLine : UIButton 
@property (nonatomic, weak) id <ColorLineDelegate> delegate;
@end
Run Code Online (Sandbox Code Playgroud)

  • 看看@MichaelDautermann正在回复的帖子. (2认同)

Joh*_*nes 21

当我在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
Run Code Online (Sandbox Code Playgroud)

.M:

#import "ColorLine.h"

@implementation ColorLine

@synthesize delegate;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)


小智 6

也许有点晚,但要"符合ARC",你只需要更换

@property (nonatomic, assign) id <ColorLineDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)

通过

@property (nonatomic, strong) id <ColorLineDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)

再见.