2012-02-10 3 views
0

私はスクロールビューを含むビューコントローラを持っています。スクロールビューの内部には、別のUIコアグラフィックスビューがあります。ビューコントローラでは、コアグラフィックスビュー用の一時オブジェクトを作成し、それにいくつかのデータを割り当て、それをビューコントローラの属性に割り当てます。例えば:ビューコントローラで:IBにおいてプログラムで作成されたビューとインターフェイスビルダのプレースホルダのオブジェクトの混在

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

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

、Iビュー・コントローラ・ペン先を開き、スクロールビューを追加し、ビューを埋め込み、コアグラフィッククラスを表示することを割り当てます。そのビューからIBOutletをView Controllerの属性に接続します。

私の問題は、ビューコントローラがtempビューオブジェクトを作成し、それを正しいデータで割り当てますが、IBは独自のオブジェクト(異なるメモリID)をインスタンス化して表示するように見えます。ビューコントローラ。

このタイプのセットアップを作成する正しい方法は何ですか?

答えて

0

オブジェクトをペン先にドラッグすると、IBはそのオブジェクトを作成してアーカイブします。このため、IBで作成するinit/initビューを割り当てる必要がありません。

私は、あなたが正しいジオメトリを得ることができるように、IBであなたのビューを作成していると思いますか?ビューを作成して実行時にすぐに置き換えることは、まれです。より一般的には、幾何学的な目的のために、IBでコンテナビューを作成し、プログラムで作成したビューをそのサブビューとして追加することです。

あなたのコードはが実行されているときに、これの最も重要な部分を除外しました。それは〜で始まったのか...? -awakeFromNib? -loadView? -viewDidLoad?これらは正確に定義された順序で発生するため、正確な位置は重要です。あなたのコードを間違った場所に置くと、ペン先がアーカイブされずに完全に再接続される前に実行されるので、ペン先はコードが何であっても邪魔になります。

So:自分の[self setGraph](私はドットシンタックスを使用できません)のコードがいつ実行されますか?

+0

[self setGraph]がViewDidLoadで実行されています。そして、はい、私は正確なサイジングを得るためにIBでの見解を持っています。私はIBからグラフビューを削除して、それをscrollViewにサブビューとして追加しようとしましたが、うまくいきませんでした。おそらく私は同じ問題がスクロールビューでも起こっているからです。 シークエンシングが重要であるとお伝えしましたが、ペン先がロードされた後にオブジェクトを設定してこの作業を行うことはできますか?ビューコントローラの実装ではどこに配置しますか?助けてくれてありがとう。 – taylormade201

関連する問題