Мои объекты в раскадровке неправильно связаны с кодом

Я пытаюсь использовать раскадровки в своем приложении. Начал хорошо, добавил два вью-контроллера с кнопкой для перехода с первого на второй. Проблема в этом втором контроллере представления: объекты, которые я добавляю на него и связываю с кодом, не работают. Когда я устанавливаю точку останова в коде контроллера представления, для свойства self.property устанавливается значение nil, тогда как раскадровка должна создавать его экземпляр.

Я часами искал ответ, и я действительно не понимаю проблемы, так как все остальное вроде бы хорошо.

Я пытался написать свойство в коде (сильное/неатомарное, неатомарное/сохранение и даже слабое/неатомарное), чтобы напрямую связать объект с кодом, чтобы он автоматически создавал свойство, но я никогда не получаю ничего, кроме "nil " с точками останова.

viewController.h:

@interface NMLoadingViewController : UIViewController
{
    __weak IBOutlet UIProgressView *imageProcessingProgressView;
}
@property (weak, nonatomic) IBOutlet UIProgressView *imageProcessingProgressView;

@end

.m:

@synthesize imageProcessingProgressView;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    // Custom initialization
    NSLog(@"INIT.");
}

(среди других строк нерелевантного кода)

Если я установлю точку останова на «INIT. строка, мой imageProcessingProgressView равен нулю. Я не вижу причин для этого, я думаю, я упустил очень маленькую деталь...

(Обратите внимание, что я пробовал это с другими объектами, такими как UILabel, но это тоже не сработало. Странно, когда у меня было два объекта, у одного из них был адрес, который не был нулевым, но все же он был поврежден и не отображался правильный объект)

Редактировать: было много проблем ни за что... Проблема в представлении переменных в XCode, которое показывает мою переменную как "ноль", тогда как журнал показывает мне правильный объект...


person Grhyll    schedule 07.06.2012    source источник


Ответы (3)


Удали это...

{
    __weak IBOutlet UIProgressView *imageProcessingProgressView;
}

...и сделать недвижимость прочной.

Измените сообщение журнала на...

NSLog(@"INIT: %@", self.imageProcessingProgressView);

... и посмотреть, если у вас все еще есть проблема. Если вы это сделаете, взгляните еще раз на свои связи в раскадровке.

person Phillip Mills    schedule 07.06.2012
comment
Ну... наконец, из консоли приходит ошибка: я вижу нулевой адрес для моего изображенияProcessingProgressView, но журнал дает правильный объект... Кажется, у XCode есть некоторые проблемы, я вижу это не в первый раз:/ Спасибо, по крайней мере, я знаю, что глючит только вид переменных. - person Grhyll; 07.06.2012
comment
Однако в другой функции я пытаюсь установить значение индикатора выполнения, и оно не отображается: [self.imageProcessingProgressView setProgress:[[объект уведомления] floatValue]*100 анимированный: НЕТ]; (значение с плавающей запятой правильное, потому что я его регистрирую.) Есть ли какая-либо другая функция, которую нужно вызвать, чтобы показать это изменение на экране? (Если ответ быстрый.) - person Grhyll; 07.06.2012
comment
Не обращайте внимания на этот последний вопрос, я нашел ответ! Спасибо за помощь. - person Grhyll; 07.06.2012
comment
И (извините за многочисленные комментарии), обратите внимание, что __weak и все работает нормально (что довольно здорово, потому что это код, который XCode написал мне автоматически, когда я связал объект с кодом!). - person Grhyll; 07.06.2012

Убедитесь, что NMLoadingViewController является классом вашего viewController.

person Eric    schedule 07.06.2012
comment
Да, связь между объектом контроллера представления и классом верна, потому что она останавливается до точки останова, установленной в коде класса. - person Grhyll; 07.06.2012
comment
Что ж... Смотрите мой ответ Филлипу Миллсу, наконец, это сработало, но мое переменное представление испорчено... Однако спасибо. - person Grhyll; 07.06.2012

Сначала попробуйте ответ @Eric, потому что я считаю, что это настоящая проблема.

Кроме того, убедитесь, что вы действительно используете построитель интерфейса для подключения элементов управления к контроллеру представления. Это делается путем перетаскивания линии из элемента управления обратно в свойство контроллера представления.

person azamsharp    schedule 07.06.2012
comment
Как ответил Эрик, я почти уверен, что ссылка на контроллер представления в порядке; что касается другого момента, я перетащил представление прогресса в свой контроллер представления с помощью построителя интерфейса; затем я перетащил строку из представления прогресса (щелкнув правой кнопкой мыши/перетащив) в файл .h, который добавил код, написанный в моем сообщении. - person Grhyll; 07.06.2012
comment
Что ж... Смотрите мой ответ Филлипу Миллсу, наконец, это сработало, но мое переменное представление испорчено... Однако спасибо. - person Grhyll; 07.06.2012