Заранее извиняюсь за этот вопрос, хотя он долго обсуждался с момента выхода iOS. Но я до сих пор не понимаю, несмотря на все мои усилия. Самое близкое изображение, которое я могу себе представить, это «замороженный и высушенный граф объектов», что хорошо, но это не помогает соединить точки, когда дело доходит до необработанного программирования.
Итак, учитывая, что вы не можете ничего описать, пока не выясните, что он делает, давайте возьмем следующий пример:
1) У меня есть файл Xib, скажем, UIView, с метками и imageView
2) У меня есть classX, подкласс от UIView, который был прикреплен к Xib в инспекторе идентификации IB. Выходы ИБ и действия ИБ подключаются к этому классу в инспекторе соединений. Этот класс объявляет IB/IA как свойства.
3) У меня есть UIViewController, представленный classVC. В этом классе я создаю экземпляр 1) с использованием стандартного [[NSBundle mainBundle] loadNibNamed:@"bla" owner:??? options:nil][0];
4) classX и classVC общаются через настраиваемых делегатов, стандартные вещи.
Вопросы:
а) Кто является владельцем файла XIB. Честно говоря, я понятия не имею.
б) что мне поставить в [[NSBundle mainBundle] loadNibNamed:@"bla" owner:??? options:nil][0];
для параметра owner, и самое главное, почему?
Когда граф объектов размораживается и поливается водой, не должна ли среда выполнения подключаться к розеткам, определенным в 2), так какой в этом случае смысл владельца файла?
OR
Если выходы файла XIB ни к чему не подключены, означает ли «владелец файла» «я класс, содержащий все необходимые выходы, чтобы можно было установить соединения между экземпляром этого класса и распакованным XIB? (поэтому я не поймите, ведь как бы ассоциация сложилась???)
Ну это все. Такой же тупой, как и прежде.
РЕДАКТИРОВАТЬ: я не согласен с тем, что другие ответы одинаково верны. Я понимаю, что они имели в виду, но пока мне еще предстоит понять, что должен содержать параметр owner для описываемого мной случая, а главное, почему.
XYZ
является подклассом представления, если вы хотите связать ссылкиIBOutlet
иIBAction
с самим подклассом представления, вы должны (а) указать пользовательский класс для самого представления в IB; и (б) вы свяжете действия и выходы с этим, а не с владельцем файла. Очевидно, что если у вас есть IBAction, который вы хотите связать с владельцем файла (например, контроллером), вы тоже можете это сделать. Но вы никогда не назначите владельцем представления, созданного NIB, самого себя. - person Rob   schedule 20.03.2013self
(например, контроллера представления, который вызывал это) в качестве владельца, но NIB нередко не делает никаких ссылок на владельца. - person Rob   schedule 20.03.2013MyClass
. Если это общийNSObject
, для которого у вас, например, определены некоторыеIBAction
методы, то ваш подход звучит хорошо. Но если это подклассUIView
, предназначенный для представления представления, созданного в NIB, то я думаю, что указывать его как владельца неправильно (если только то, что находится в вашем NIB, не предназначено для подпредставления другого представления). В итоге я не считаю, что владельцем должно быть представление, указанное в NIB, а какой-то другой, уже существующий объект (контроллер, представление и т. д.), которому будут принадлежать объекты, созданные iOS из NIB. - person Rob   schedule 20.03.2013