как поменять uilabel из другого класса - PullRequest
1 голос
/ 09 января 2012

У меня есть ViewController.h / m и другой класс Keyboard.h / m.В моем ViewController.h у меня есть UILabel:

@interface ViewController : UIViewController{

UILabel *label;

}

@property (nonatomic, retain) IBOutlet UILabel *label;

, и мой ViewController.m выглядит так

#import "ViewController.h"
@synthesize label;
...

Теперь я хочу изменить метку с Keyboard.m.Я пробовал что-то вроде этого:

#import "ViewController.h"
...
ViewController *vc;
vc.label.text = @"text";

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

Ответы [ 2 ]

1 голос
/ 09 января 2012

Это очень подвержено ошибкам, что вы делаете здесь.

ViewController *vc;

объявляет указатель, но это не будет инициализировано;поэтому, когда вы обращаетесь к его свойству vc.label.text, objc_messageSend () будет передан фиктивный указатель, поэтому он может потенциально потерпеть крах!(вам повезло, если id не сделал этого.)

В любом случае: если вы сделали это хорошо, как ViewController *vc = [[ViewController alloc] init];, создание нового экземпляра не затронуло бы другой экземпляр.Вы должны где-то хранить указатель на ваш экземпляр, например, установить @property (retain) ViewContrller *vc; для объекта делегата приложения вашего приложения и обращаться к нему через это свойство следующим образом:

[(MyAppDelegate *)[[UIApplication sharedApplication] delegate] vc].label.text = @"new text";

таким образом, как оно должно работать.

Надеюсь, это поможет.

0 голосов
/ 09 января 2012

Как вы запускаете переменную vc? Я предполагаю, что именно отсюда и происходит ошибка. Попробуйте сделать:

vc = [[ViewController alloc] initWithNibName: @ ViewController "];

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

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