在IOS5,使用ARC同时创造我自己的委托,错误使用_weak

问题描述:

在我.h文件中关于我有这样的:在IOS5,使用ARC同时创造我自己的委托,错误使用_weak

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

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

在我的.m文件我有:

@synthesize delegate; 

我得到这个错误:

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

如何解决这个错误?

我返回一个NSArray *,因为我从JSON结果返回数据。

UPDATE:

这里是我的整个.h文件中 -

#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

您是否已经在其他地方定义了代表,在超类中说过? – atticus 2012-04-12 02:29:35

+0

@atticus - 我的印象是该协议正在定义委托。上面的.h和.m文件是针对同一个类的,因为我指的是属性中的协议,并尝试将其合成,然后出现错误。 – 2012-04-12 09:25:15

+0

听起来这个错误意味着一个伊娃被创建为__strong,并且声明属性为“弱”是有问题的。你介意发布整个.h文件吗? – atticus 2012-04-12 12:14:48

在{}(在顶部),它应该工作摆脱id <ScanBookDelegate> delegate;。使用属性时不需要指定。如果你真的想,那么你可以声明这个伊娃__weak,以便它与你的财产相匹配(默认情况下ivars是强大的)。