Переменная вне IBAction - PullRequest
       22

Переменная вне IBAction

2 голосов
/ 10 марта 2012

У меня есть проблема, которую я пытаюсь решить за неделю. Моя цель - вывести переменную из моего IBAction, чтобы использовать, например, в -(void)viewDidLoad .. Но насколько я могу сейчас, я могу использовать свою переменную только в моем IBAction ..

- (IBAction) changeLat:(NSNumber *)str {

longi =  str; 
double lop = longi.doubleValue;

NSLog(@"%f",lop);
}

- (void)viewDidLoad
{
[super viewDidLoad];

NSLog (@"%@",lop);
}

Он NSLog показывает все отлично в действии, но в представлении загрузил, он даже не регистрирует его.

Ответы [ 2 ]

1 голос
/ 10 марта 2012

Если вы создаете переменную внутри -IBAction, область действия этой переменной - только этот метод, поэтому вы не можете получить доступ к этой переменной за ее пределами.

Если вы хотите, чтобы ваша переменная была глобальной для вашего класса, вы должны создать его в объявлении вашего класса, например:

@interface MainViewController () {
@private
    double lop;

}

Поместите это в начало вашего файла .m, и тогда lop будет доступен для всех ваших классов.

Подробнее о области действия переменных вы можете прочитать здесь:

http://www.techotopia.com/index.php/Objective-C_Variable_Scope_and_Storage_Class

0 голосов
/ 10 марта 2012

На самом деле, IBAction преобразуется в void препроцессором.Он используется Interface Builder в качестве метки, которая идентифицирует этот метод как действие, которое может быть связано с объектом IB.

Нет способа (AFAIK) использовать два возвращаемых типа в функции (например, `(IBAction)double) ´, эквивалентно ´ (void double) ´), но хорошей практикой может быть что-то вроде этого:

- (IBAction)changeLatAction:(id)sender {
    NSNumber *str = <get the NSNumber from a valid place>;
    [self changeLat:str];
}

- (double) changeLat:(NSNumber *)str {
    longi =  str; 
    double lop = longi.doubleValue;
    NSLog(@"%f",lop);
    return ????;
}

Ваше первое объявление changeLat кажется неправильным, поскольку в качестве первого параметравы всегда получите объект «отправитель» или «вызывающий», связанный с IB (при вызове, конечно, из действия), поэтому вам нужно получить значение str из допустимого места.

Приветствие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...