Подтвердить что ты не робот

'Существующий делегат ivar' для unsafe_unretained property 'delegate' должен быть __unsafe_unretained

Я получаю сообщение об ошибке выше, но не знаю, как это сделать. Это мой код:

.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

Ошибка возникает в строке синтезатора. Я не могу найти проблему, хотя.

4b9b3361

Ответ 1

Похоже, что ваш проект может использовать ARC, тогда свойства должны быть объявлены следующим образом:

#import <UIKit/UIKit.h>

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

@interface ColorLine : UIButton 
@property (nonatomic, weak) id <ColorLineDelegate> delegate;
@end

Ответ 2

Используйте этот синтаксис:

@interface SomeClass  : NSObject {
    id <SomeClassDelegate> __unsafe_unretained  delegate;
}
@property (unsafe_unretained) id <SomeClassDelegate> delegate;

Ответ 3

У меня была такая же проблема, когда я использовал старый пример кода, в котором не было ARC в моем проекте ARC. Похоже, вам больше не нужно добавлять объявления переменных в определение интерфейса. Поэтому ваш код должен работать следующим образом:

ч:

#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

Ответ 4

Возможно, немного поздно, но чтобы быть "совместимым с ARC", вам просто нужно заменить

@property (nonatomic, assign) id <ColorLineDelegate> delegate;

по

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

Bye.

Ответ 5

Если вы хотите слабое свойство, это также работает.

@interface MyClass  : NSObject {
    __weak id <MyClassDelegate> _delegate;
}
@property (nonatomic, weak) id <MyClassDelegate> delegate;

Ответ 6

вы также можете использовать

@dynamic delegate 

в реализации вместо синтеза.