#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’