在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
答
在{}(在顶部),它应该工作摆脱id <ScanBookDelegate> delegate;
。使用属性时不需要指定。如果你真的想,那么你可以声明这个伊娃__weak,以便它与你的财产相匹配(默认情况下ivars是强大的)。
您是否已经在其他地方定义了代表,在超类中说过? – atticus 2012-04-12 02:29:35
@atticus - 我的印象是该协议正在定义委托。上面的.h和.m文件是针对同一个类的,因为我指的是属性中的协议,并尝试将其合成,然后出现错误。 – 2012-04-12 09:25:15
听起来这个错误意味着一个伊娃被创建为__strong,并且声明属性为“弱”是有问题的。你介意发布整个.h文件吗? – atticus 2012-04-12 12:14:48