2012-01-25 70 views
3

我現在storyboard佈局IOS的​​UIView沒有初始化調用

UIViewController 
    | 
    +- UIView (MyView) 

MyView我有以下功能內置了

  • 初始化
  • initWithFrame
  • 的initWithCoder
  • awakeFromNib
  • awakeAfterUsingCoder

掉那些五,只有實際運行

  • awakeFromNib
  • awakeAfterUsingCoder

我已經沖刷了一會兒,我想不通爲什麼init函數不起作用。

+1

嗯...我想'initWithCoder'會是從xib或storyboard文件中取消存檔UIView時調用的方法。但是,故事板可能會做一些不同的事情? –

+0

@MichaelDautermann我也這麼想。這就是爲什麼我驚訝它不起作用,但'喚醒AfterUsingCoder'。因爲那種暗示'initWithCoder'已經運行了.. – Jacksonkr

+0

@MichaelDautermann這很簡單。這是現在連續兩天。我有' - (id)initWithCoder:(NSCoder *)aDecoder:(CGRect)frame'。爲什麼看到這些n00b錯誤需要我很長時間?我不知道。在我的辯護中,Xcode並沒有給我任何構建錯誤。 – Jacksonkr

回答

3

每我的評論往上頂:

@MichaelDautermann它是簡單的東西。這是現在連續兩天。我有 - (id)initWithCoder:(NSCoder *)aDecoder:(CGRect)frame。爲什麼看到這些n00b錯誤需要我很長時間?我不知道。在我的辯護中,Xcode並沒有給我任何構建錯誤。

錯誤代碼我有:

- (id)initWithCoder:(NSCoder *)aDecoder:(CGRect)frame { 
    if(self = [super initWithCoder:aDecoder]) { 
     // 
    } 
    return self; 
} 

正確代碼:

- (id)initWithCoder:(NSCoder *)aDecoder { 
    if(self = [super initWithCoder:aDecoder]) { 
     // 
    } 
    return self; 
} 
+1

它不會產生構建錯誤,因爲它只是您定義的另一種方法......但沒有人調用它。 :) – Eiko

0

關於initWithFrame: UIView類文檔

如果您使用Interface Builder來設計自己的界面,這種方法 不是當你的視圖對象隨後從筆尖 文件加載稱爲下。

從下筆尖部分

在iOS中,符合NSCoding協議的任何對象正在使用的initWithCoder初始化Resource Programming Guide:方法

在IOS不使用initWithFrame自定義視圖:初始化方法。

您的自定義視圖的界面是否聲明自己符合NSCoding協議?這可能是一個原因initWithCoder:方法不叫

@interface MyView : UIView <NSCoding> { 

}