以编程方式创建的视图和界面构建器占位符之间的对象混合

时间:2012-02-10 02:23:51

标签: objective-c ios uiviewcontroller interface-builder

我有一个包含滚动视图的视图控制器。在滚动视图内,还有另一个UI核心图形视图。在视图控制器中,我为核心图形视图创建一个临时对象,并为其分配一些数据,然后将其分配给视图控制器的属性。例如:在视图控制器中:

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

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

在IB中,我打开视图控制器nib并添加滚动视图,并嵌入视图并为其分配核心图形视图类。然后将IBOutlet从该视图连接到视图控制器中的属性。

我的问题是视图控制器创建临时视图对象,使用正确的数据将其分配给自身,但IB似乎实例化其自己的对象(不同的内存ID)并显示该视图而不是视图中的那个控制器。

构建此类设置的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

如果将对象拖到笔尖中,IB会创建并存档该对象。这就是您不必在IB中创建分配/初始化视图的原因。

我猜你是在IB中创建你的视图,这样你就能得到正确的几何图形,或者......?创建视图然后在运行时立即替换它是相当不寻常的。出于几何目的,更常见的是在IB中创建容器视图,然后将以编程方式创建的视图添加为其子视图。

你的代码遗漏了最重要的一部分,当 它正在运行时。它在 - 但是......? -awakeFromNib? -loadView? -viewDidLoad?确切的位置很重要,因为它们以明确定义的顺序发生。如果您将代码放在错误的位置,它将在nib被取消存档并完全重新连接之前运行,因此无论您的代码是什么,nib都会破坏。

那么:什么时候你的[self setGraph](我不能使用点语法)代码运行?