31 votes

«Délégué ivar existant» pour la propriété unsafe_unretained «délégué» doit être __unsafe_unretained

J'obtiens le message d'erreur ci-dessus, mais pas sûr de la façon d'aller sur la fixant. C'est mon code:

.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

L'erreur se produit dans le synthétiser ligne. Je ne trouve pas un problème.

54voto

janBP Points 459

Utilisez cette syntaxe:

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

52voto

rckoenes Points 44278

On dirait que votre projet est peut-être l'aide d' ARC puis propriétés doivent être déclarés de cette façon:

#import <UIKit/UIKit.h>

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

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

21voto

Johannes Points 388

J'ai eu le même problème quand j'ai utilisé l'ancien code d'exemple qui ne disposent pas de l'ARC de mon ARC de projet. Il semble que vous n'avez pas besoin de mettre les déclarations de variable dans la définition de l'interface, pas plus. Ainsi, votre code devrait fonctionner comme ceci:

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

6voto

Flopi Points 48

Peut-être un peu tard, mais pour être "ARC conforme", il vous suffit de remplacer

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

par

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

Bye.

3voto

waterdudu Points 26

Si vous voulez une faiblesse de la propriété, cela fonctionne aussi.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X