2013-12-06 3 views
0

основном проблема у меня есть это:Как использовать переменную из другого класса в Objective C

helloworldlayer в классе у меня есть переменная, которую я хочу показать в другом классе.

в Classe helloworldlayer.h

@interface HelloWorldLayer : CCLayer <GKAchievementViewControllerDelegate, GKLeaderboardViewControllerDelegate> 
{ 
    int _probar; 
} 

@property (nonatomic,readwrite)int probar; 

и helloworldlayer.m

@synthesize probar=_probar; 

для использования в других Классе я это делаю

HelloWorldLayer *myobject = [[HelloWorldLayer alloc] init]; 
distan = myobject.probar; 

все отлично работает, если переменная _probar дает значение в примере инициализации helloworldlayer.m:

_probar = 20; 

, но если я ставлю переменную константу при изменении не работает. например

- (void)updateDistancia:(ccTime)dt 
{ 
    otra =+1; 
    _probar = otra; 
} 

в другом классе говорит мне, что равна нулю, и я не понимаю, почему, если кто-то говорит мне, что это будет происходить гораздо признательна или у вас есть другое решение.

+0

Как вы определили otra? – RishiG

+0

в каком классе находится метод updateDistancia? – YvesLeBorg

+0

otra Я определил как int в helloworldlayer.h и updatedistancia находится в классе hellowordlayer.m. – user3075201

ответ

0

думаю думаю int _probar; решит проблему.

@property (nonatomic,readwrite)int probar; будет автоматически поддерживаться iVar с именем _probar и иметь генератор и сеттер. Таким образом, @synthesize probar=_probar; не требуется.

@synthesize probar=someName; сообщает компилятору о возврате свойства с помощью iVar с именем someName вместо имени по умолчанию. В вашем случае у вас уже есть iVar с именем по умолчанию, поэтому свойство и iVar указывают на разные ints.

+1

Я бы добавил, что он должен использовать this.probar для установки и чтения значения, никогда не устанавливающего внутреннюю переменную напрямую. Как вы говорите, вы также можете удалить определение переменной из класса. –

+0

Да self.probar - лучшая практика, но не в методах init. Но это просто лучшая практика, и self.probar, [self probar] и _probar должны давать тот же результат, если используются геттеры и сеттеры по умолчанию. – Jzon

+0

Не все равно, если что-то еще использует KVC для мониторинга изменений в объекте или если свойство является атомарным. Даже в init вы должны ВСЕГДА использовать устройства доступа, потому что вы никогда не знаете, когда можете изменить определение свойства или добавить другое поведение в настройках. –

Смежные вопросы