@Synthesize IBOutlet (UIScrollView) не работает - PullRequest
1 голос
/ 12 января 2012

Речь идет о розетке, неправильно синтезирующей (UIScrollView)

В одном конкретном случае у меня есть интерфейс, объявленный как:

@interface VC_Create_Preview : UIViewController <UIScrollViewDelegate> {
    UIScrollView *scrollView;
}

@property (nonatomic, retain) IBOutlet UIScrollView *scrollView;

А в реализации ....

@synthesize scrollView;

Но в режиме отладки я вижу, что мой self-> scrollView всегда имеет 0x0 рядом с ним. Выполнение операций типа

CGRect frame = scrollView.frame;

всегда возвращает начало координат, высоту, ширину нуля (подозреваю, что он не правильно синтезировал)

Означает ли 0x0, что оно не указывает на какое-либо место в памяти? Означает ли это, что он не синтезировал правильно? Может быть, где-то неработающая ссылка от розетки к просмотру скролла в IB?

Приветствие Kevin

Ответы [ 5 ]

2 голосов
/ 12 января 2012
  1. Убедитесь, что вы действительно подключили UIScrollView к розетке.
  2. Имейте в виду, что scrollView не будет установлен до тех пор, пока представление не будет загружено с пера.*
1 голос
/ 12 января 2012

0x0 означает нулевой указатель, вы, вероятно, не привязали scrollView к представлению с прокруткой в ​​IB ... Это означает, что перо viewControllers имеет представление scrollView и привязано к выходу.

0 голосов
/ 24 апреля 2013

Попробуйте удалить локальную декларацию scrollview, т.е.

@interface VC_Create_Preview : UIViewController <UIScrollViewDelegate> {
    UIScrollView *scrollView;//remove this
}

Это может помочь вам. Также при распределении используйте _scrollView вместо scrollView.

0 голосов
/ 22 сентября 2012

Убедитесь, что вы используете правильный класс в своем коде, например, первый UIViewController, который вы поместите в раскадровку, будет иметь универсальный UIViewController, который называется «whateveryourprojectiscalled».

Однако проблема для меня заключалась в том, что я связал это с несколькими другими UIViewController, ни у одного из которых не было объявлено своего собственного класса, поэтому розетка скроллера, которую я писал, отображается только на основном оригинале UIViewController это не там, где мне было нужно. Поэтому, как только я написал имя пользовательского класса, а затем переписал код, чтобы учесть это. Розетка появилась отлично и работала нормально.

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

Если вы хотите работать с розетками и использовать там реальные размеры, которые увидит пользователь (включая панель навигации, панель вкладок и т. Д.), Вы должны реализовать все изменения пользовательского интерфейса на viewWillAppear или viewDidAppear.
Подробнееоб этапах загрузки вида с кончика.

...