Изменить текст IBOutlet на свойство объекта, возвращаемого из пользовательского класса - PullRequest
1 голос
/ 14 февраля 2012

Я использую xCode 4.2.1 - у меня есть приложение, которое использует веб-сервис и извлекает некоторые данные, используя пользовательский класс и NSURLConnection. Пользователь нажимает кнопку «обновить», которая запускает серию событий, которые происходят в некоторых пользовательских классах в моем проекте, и я могу получить объект вместе со свойствами, которые я хочу вернуть в методе в MainViewController, я просто не удалось изменить текст IBOutlet на свойство (NSString) возвращаемого объекта.

В моем "MainViewController.h" у меня есть IBOutlet (и он связан с кнопкой в ​​MainViewController.xib):

IBOutlet UILabel *textLabel;

и

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

И я синтезировал метку в MainViewController.m

@synthesize textLabel;

Процесс выглядит следующим образом: кнопка «Обновить» нажата -> запускает метод в MainViewController -> запускает другой метод в пользовательском классе (извлекает данные из Интернета, создает объект) -> отправляет объект в MainViewController через: (в моя пользовательская реализация класса)

// parsing, etc.. and define a string for priceString property of mp object    
MainViewController *mvc = [[MainViewController alloc] init];
    [mvc log:mp];

И в моем MainViewController.m я могу получить доступ к свойству этого объекта и распечатать его в NSLog просто отлично из этого метода.

- (void) log:(Price *)mp {

    self.textLabel.text = mp.priceString;
    NSLog(@"%@", mp.priceString);
}

На данный момент я вижу данные в журнале, но текст textLabel не изменится.

Я пытался читать примеры в течение недели, и я слышал все от делегирования до ответов NSNotication, но, похоже, ничего не работает.

Все, что мне нужно сделать, это заполнить IBOutlet методом - (void). Любая помощь будет принята с благодарностью, и я готов принять делегирование, но я очень новичок в этом и ищу пример.

РЕДАКТИРОВАТЬ - более подробно.

После дальнейших исследований, я думаю, я должен заметить, что мое NSURLConnection, которое возвращает мои объекты, находится в отдельном классе, и я читал много потоков, где люди запускают соединение в viewDidLoad.

1 Ответ

1 голос
/ 16 февраля 2012

Проблема в том, что вы звоните [mvc log:mp]; сразу после инициализации контроллера представления.На этом этапе представление все еще не загружено из файла xib.

вы можете изменить log, чтобы увидеть, что:

- (void) log:(Price *)mp {
    if (self.textLabel) {
        self.textLabel.text = mp.priceString;
    } else {
        NSLog(@"textLabel is nil.");
    }
}

Вы можете вызвать [mvc log:mp]; в контроллере представленияviewDidLoad или после выполнения viewDidLoad.

Чтобы лучше это понять, добавьте NSLog(@"viewDidLoad."); в viewDidLoad метод и добавьте NSLog(@"viewController initialized."); сразу после кода, в котором вы инициализировали контроллер представления.

Вы увидите следующее

viewController initialized.
textLabel is nil. // if you call log as usual after initializing the view controller.
viewDidLoad.
...