Подтвердить что ты не робот

Ошибка ARC при объявлении делегата ivar

Я использую 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 - автоматический подсчет ссылок

4b9b3361

Ответ 1

Попробуйте что-то вроде следующего (пример из 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.

Ответ 2

С ARC и iPhone Simulator 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

Ответ 3

Существует проблема, когда, даже если вы обновляете XCode (4.2+) из Mac App Store, как требуется Apple, она оставляет старую версию XCode на вашем компьютере. Итак, если у вас есть XCode, прикрепленный к вашей стартовой панели, и запустите его, вы получите все эти ошибки, как указано ниже. Вы должны найти более новую версию XCode, скажем, используя функцию Spotlight, запустить ее, а затем в качестве одной из своих первых задач удалите старую версию XCode. Тогда у вас больше нет сообщений об ошибках.