Смешение объектов между программно созданным представлением и заполнителем интерфейса - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть контроллер представления, который содержит представление прокрутки.Внутри прокрутки есть еще одно графическое представление интерфейса пользователя.В контроллере представления я создаю временный объект для основного графического представления и назначаю ему некоторые данные, а затем назначаю его атрибуту контроллера представления.Например: В контроллере представления:

@interface controller : UIViewController {
        GraphView *graph;
}
@property ... IBOutlet GraphView *graph;

@implementation
GraphView *temp = [[GraphView alloc] init];
temp.someArray = anExistingDataArray;
self.graph = temp;

В IB я открываю перо контроллера представления и добавляю представление прокрутки, а также внедряю представление и назначаю ему базовый класс графического представления.Затем подключите IBOutlet из этого представления к атрибуту в контроллере представления.

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

Как правильно построить этот тип установки?

1 Ответ

0 голосов
/ 10 февраля 2012

Если вы перетащите объект в перо, IB создаст и заархивирует этот объект. Вот почему вам не нужно выделять / инициализировать представления, которые вы создаете в IB.

Я предполагаю, что вы создаете свой вид в IB, чтобы вы могли получить правильную геометрию, или ...? Довольно необычно создать представление и затем немедленно заменить его во время выполнения. Для геометрических целей более распространенным является создание представления контейнера в IB, а затем добавление созданных программным способом представлений в качестве подпредставлений этого.

Ваш код не учитывает самую важную часть этого, хотя , когда запускается. Это в -init ...? -awakeFromNib? -loadView? -viewDidLoad? Точное местоположение имеет значение, поскольку они происходят в четко определенной последовательности. Если вы поместите свой код в неправильное место, он запустится до того, как перо будет разархивировано и полностью повторно подключено, поэтому перо сработает, что бы ни делал ваш код.

Итак: когда ваш код [self setGraph] (я не могу заставить себя использовать точечный синтаксис) запускается?

...