web-dev-qa-db-ja.com

デリゲートivarを宣言するときのARCエラー

私はARCを使用しています(いいえ、これはNDAではありません)。私は私のインターフェースで私のivarを宣言しています

_id itemDelegate;
_

次に、プロパティを宣言します。

@property (nonatomic, weak) id<mySecretDelegateYouAreNotSupposedToSeeOnSO> itemDelegate;(ARCのために割り当てではなく弱い)

私の実装ファイルでは、単純に合成します:_@synthesize itemDelegate;_

ただし、次のエラーが発生します。

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

誰が何が悪いのか知っていますか?ご協力いただきありがとうございます。

ARC-自動参照カウント

27
Dylan Reich

次のようなものを試してください(例: 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がどのように宣言されているかに注意してください。

46

ARCおよびiPhoneSimulator 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
9

Mac App StoreからXCode(4.2+)を更新しても、Appleが必要とするように、古いバージョンのXCodeがコンピューターに残るという問題があります。 XCodeをランチパッドに固定して起動すると、以下のようにこれらすべてのエラーが発生します。たとえば、Spotlight機能を使用して、XCodeの新しいバージョンを見つけて実行し、最初のタスクの1つとして実行する必要があります。古いバージョンのXCodeが削除され、このようなエラーの報告はなくなります。

1
snibbe