声明委托ivar时出现ARC错误



我使用ARC(不,这不是NDA)。我用

在接口中声明变量
id itemDelegate;

然后声明属性:

@property (nonatomic, weak) id<mySecretDelegateYouAreNotSupposedToSeeOnSO> itemDelegate;(由于ARC,用弱代替赋值)

在我的实现文件中,我简单地合成它:@synthesize itemDelegate;

然而,我得到错误:

"Existing ivar 'ItemDelegate' for _weak property 'itemDelegate' must be _weak".

有人知道怎么回事吗?谢谢你的帮助。

ARC -自动引用计数

尝试如下内容(示例来自:http://vinceyuan.blogspot.com/2011/06/wwdc2011-session-323-introducing.html):

@interface SomeObject : NSObject {
   __weak id <SomeObjectDelegate> delegate;
}
@property (weak) id <SomeObjectDelegate> delegate;
@end

请注意ivar的声明方式

使用ARC和iPhone模拟器5.0,以下似乎工作得很好(没有警告等…):

SomeObject.h

@class SomeObject;
@protocol SomeObjectDelegate <NSObject>
- (void)someObjectDidFinishDoingSomethingUseful:(SomeObject *)object;
@end

@interface SomeObject : NSObject {
   __unsafe_unretained id <SomeObjectDelegate> _delegate;
}
@property (nonatomic, assign) id <SomeObjectDelegate> delegate;
@end

SomeObject.m

#import "SomeObject.h"
@implementation SomeObject
@synthesize delegate = _delegate;
@end

有一个问题,即使你按照苹果的要求从Mac App Store更新XCode(4.2+),它也会在你的电脑上留下旧版本的XCode。如果你把XCode固定在你的launchpad上,然后启动它,你会得到所有这些错误,如下所示。你必须找到新版本的XCode,比如使用Spotlight功能,运行它,然后作为它的第一个任务之一,它会删除旧版本的XCode。这样就不会再有类似的错误报告了。

最新更新