2012-01-25 66 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> { 

}