2014-09-12 89 views
0

我完全新的Objective-C時,Xcode和iOS開發,我試圖找出如何在啓動時運行某些代碼,所有的UI意見後和控制已被實例化。我有一個通過界面生成器添加到我的視圖控制器場景中的通用NSObject。它的定義如下:訪問接口生成器對象

#import <Foundation/Foundation.h> 

@interface Controller : NSObject { 
    IBOutlet UISlider *slider;   
    IBOutlet UILabel *label; 
} 

-(IBAction)sliderChanged:(id)sender; 

@end 

我需要在初始化時運行sliderChanged。我試了下面的方法:

#import "Controller.h" 

@implementation Controller 

-(id)init { 
    self = [super init]; 
    if (self){ 
     [self sliderChanged:nil]; 
    } 
    return self; 
} 
// More code here 

但是,當這被稱爲我的滑塊和標籤都是零。據我所知還有的ViewController類中的一個viewDidLoad方法,它可能是我所需要的,但我不知道如何從內部訪問我Controller類(這似乎是由Interface Builder的某個地方實例化的幕後)的實例方法。所有這些代碼是否應該簡單地移動到ViewController本身?這似乎是有道理的,但上面的設計是我們在課堂上指導的,所以我不確定如何去做這件事。

回答

2

在XIB/Storyboard加載器完成加載所有對象並將它們連接起來之後,它會將awakeFromNib發送給每個從XIB實例化的對象。因此,嘗試添加以下內容到Controller類:

- (void)awakeFromNib { 
    [super awakeFromNib]; 
    [self sliderChanged:nil]; 
} 

您可以找到NSObject UIKit Additions Reference「The Nib Object Life Cycle」 in the Resource Programming Guide更多信息。

無論其,如果您創建Controller作爲頂級對象,而你沒有連接任何網點,然後什麼都不引用它的XIB裝載機爲完成後,這樣系統就會釋​​放它再次。這可能不是你想要的,所以你應該在視圖控制器中連接一個插座到Controller。如果你這樣做(讓我們說出口被命名爲controller),那麼您可以在您的視圖控制器類訪問它在viewDidLoad

#import <UIKit/UIKit.h> 
#import "Controller.h" 

@interface ViewController : UIViewController { 
    IBOutlet Controller *controller; 
} 
@end 

實現:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self.controller sliderChanged:self]; 
} 
+0

第二溶液加入正是我需要的。乾杯! – 2014-09-12 20:16:40