«Существующий делегат ivar» для свойства unsafe_unretained «делегат» должен быть __unsafe_unretained - PullRequest
30 голосов
/ 15 ноября 2011

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

.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

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

Ответы [ 6 ]

53 голосов
/ 18 ноября 2011

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

@interface SomeClass  : NSObject {
    id <SomeClassDelegate> __unsafe_unretained  delegate;
}
@property (unsafe_unretained) id <SomeClassDelegate> delegate;
50 голосов
/ 15 ноября 2011

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

#import <UIKit/UIKit.h>

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

@interface ColorLine : UIButton 
@property (nonatomic, weak) id <ColorLineDelegate> delegate;
@end
21 голосов
/ 23 января 2012

У меня была такая же проблема, когда я использовал старый пример кода, который не включал 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
6 голосов
/ 08 января 2013

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

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

от

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

Bye.

3 голосов
/ 21 января 2013

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

@interface MyClass  : NSObject {
    __weak id <MyClassDelegate> _delegate;
}
@property (nonatomic, weak) id <MyClassDelegate> delegate;
1 голос
/ 21 августа 2012

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

@dynamic delegate 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...