2012-04-12 5 views
0

In meiner .h-Datei habe ich dies:Unter IOS5, ARC mit, während meiner eigenen Delegierten zu schaffen, Fehler in Bezug auf _weak mit

@protocol ScanBookDelegate 
- (void)MethodNameToCallBack:(NSArray *)s; 
@end 

@property (nonatomic, weak) id <ScanBookDelegate> delegate; 

In meiner .m-Datei Ich habe:

@synthesize delegate; 

I Erhalten Sie diesen Fehler:

Existing ivar 'delegate' for __weak property 'delegate' must be __weak 

Wie behebe ich diesen Fehler?

Ich gebe eine NSArray * zurück, da ich Daten von einem JSON-Ergebnis zurückgebe.

UPDATE:

Hier ist meine ganze .h-Datei -

#import <UIKit/UIKit.h> 

@protocol ScanBookDelegate 
- (void)MethodNameToCallBack:(NSArray *)s; 
@end 

@interface jabBookScan : NSObject 
<NSURLConnectionDelegate, NSURLConnectionDataDelegate> 
{ 
    NSURLConnection *internalConnection; 
    NSMutableData *container; 
    id <ScanBookDelegate> delegate; 
} 
- (id)initWithRequest:(NSURLRequest *)req; 
- (void)start; 
- (NSMutableData *) lookupBook:(NSString *) isbn; 
- (void)fetchedData:(NSData *)responseData; 
@property (nonatomic, copy) NSURLRequest *request; 
@property (nonatomic, copy) void (^completionBlock)(id obj, NSError *err); 
@property (nonatomic, strong) NSDictionary *jsonRootObject; 
@property NSMutableData *responseData; 
@property NSURL *myURL; 
@property (nonatomic, weak) id <ScanBookDelegate> delegate; 
@end 
+0

Haben Sie bereits einen Delegaten definiert, sagen wir in einer Superklasse? – atticus

+0

@atticus - Ich hatte den Eindruck, dass das Protokoll den Delegierten definiert. Die obige .h und .m Datei sind für die gleiche Klasse, wie ich auf das Protokoll in der Eigenschaft verweisen, und versuchen, es zu synthetisieren, und dann erhalte ich den Fehler. –

+0

Es klingt wie der Fehler impliziert, dass ein Ivar als __strong erstellt wurde, und dass die Deklaration der Eigenschaft als "schwach" problematisch ist. Würde es Ihnen etwas ausmachen, die gesamte .h-Datei zu posten? – atticus

Antwort

2

von id <ScanBookDelegate> delegate; in Ihrem Befreien Sie {} (oben) und es sollte funktionieren. Sie müssen dies nicht angeben, wenn Sie Eigenschaften verwenden. Wenn Sie das wirklich möchten, können Sie das ivar __weak so deklarieren, dass es Ihrer Eigenschaft entspricht (standardmäßig sind die iVars stark).

Verwandte Themen