Вызов переменной из одного файла в другой

#objective-c #variables #global-variables #call

#objective-c #переменные #глобальные переменные #вызов

Вопрос:

В Objective C я ищу способ вызова переменной из одного .m в другой .m

Это заданный myvar, объявленный как int в Example1.h

Пример1.m

 myvar = myvar 10
  

Пример2.m

 if (myvar == 10){NSLOG("@myvar equals the correct integer: %i",myvar);}
  

Однако по умолчанию myvar будет равен 0, потому что myvar вызывается из Example1.h в Example2.m.

Комментарии:

1. Ваше использование терминологии немного сбивает с толку. Вы не можете вызвать переменную, а также указать спецификатор формата для печати целого числа %i и не i% . Также @ символ должен быть перед кавычками. NSLOG(@"myvar equals the correct integer: %i",myvar);

2. @ Mahesh Суть не в этом… Я хочу, чтобы myvar был загружен в Example2.m

Ответ №1:

Для глобальных значений создайте класс для их хранения и определите переменные как статические. Вы также можете определить методы уровня класса для управления статической переменной. Я вызываю свой класс AppState. Вы могли бы определить myVar как статический, а затем методы класса (используйте не -) для получения и установки этой переменной.

Вот пример BOOL, к которому я могу получить доступ из любого места моего приложения.

account.h

 #import <Foundation/Foundation.h>

@interface Account : NSObject 
{
}

 (BOOL)isOffLine;
 (void)setOffLine:(BOOL)newValue;

@end
  

account.m

 #import "Account.h"

@implementation Account

static BOOL _offline;

 (BOOL)isOffLine;
{
    return _offline;
}

 (void)setOffLine:(BOOL)newValue
{
    _offline = newValue;
}

@end
  

Теперь из любого класса в моем приложении я могу #import account.h а затем использовать что-то вроде:

 if ([Account isOffLine]) {...}
  

или

 [Account setOffLine:YES];
  

Обратите внимание, что я не создавал экземпляр этого класса. Я вызываю методы уровня класса. Значение будет сохраняться между вызовами из разных классов в моем приложении.

Комментарии:

1. Не работает. Я последовал otierney.net/objective-c.html#class который не работает

2. Это работает для некоторых из нас. Возможно, у вас ошибка в коде? Если вы опубликуете это, я постараюсь помочь.

3. Спасибо. Я потратил на это не менее 4 часов. Player.h: pastebin.com/zCA1pwDw Player.m: pastebin.com/bYm6D7SU EntityZombie.h: pastebin.com/D7LPyZaD EntityZombie.m: pastebin.com/LAvZLTUn

4. Я не видел, где вы пытались применить мою идею в своем коде, так что, возможно, произошло недопонимание. Я отредактировал свой ответ, включив в него пример кода, который, я надеюсь, прояснит ситуацию.

5. Я попытался вызвать xcord с помощью [Player plyr_xcord]. Вот метод. (BOOL)plyr_xcord{возвращает xcord;} Но несмотря ни на что, xcord всегда равен нулю!

Ответ №2:

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

Комментарии:

1. Я получаю сообщение об ошибке: свойство ‘xcord’ пытается использовать ivar ‘xcord’, объявленный в суперклассе ‘EntityZombie’