'Существующий делегат 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
Ошибка возникает в строке синтезатора. Я не могу найти проблему, хотя.
Ответы
Ответ 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
в реализации вместо синтеза.