2014-02-28 38 views
0

我很擅長使用多個視圖控制器進行編程。 我有一個RootViewController和一個FirstViewController。裏面的RootViewController:具有多個控制器的通信和空間分配

@property (nonatomic, retain) FirstController * firstController; 


- (FirstController *)firstController { 

    if (!_firstController) { 
     UIStoryboard *storyboard = self.storyboard; 
     _firstController = [storyboard instantiateViewControllerWithIdentifier:@"First View"]; 
    } 

    return _firstController; 
} 

所以,我設法看到我在故事板中設計的FirstViewController。

問題是這樣的。如果我嘗試運行裏面RootViewController的指令:

_firstController.myString = _myString; 

myString的顯然是內部RootViewController的屬性的名稱和內部FirstViewController相同。如果不爲_firstController分配內存,則運行此指令不起作用。但是,如果我分配內存並初始化_firstController,那麼在Interface Builder中所做的每個調整都會消失。

我該如何解決?我確信我正在嘗試做一些非常錯誤的事情。 預先感謝您。

回答

1

你寫了getter - 所以用它!

self.firstController.myString = _myString; 

,而不是

_firstController.myString = _myString; 

你試圖直接訪問實例,當然沒有爲它分配的,因爲你正在使用的技術稱爲「懶加載」記憶(伊娃將被分配當它需要)。通過使用self.firstController,您只需發送消息[self firstController],它將爲第一個控制器分配內存。

+0

完美!謝謝! – charles