无限循环试图从厦门国际银行在IB创建自定义视图(infinite loop trying to cr

2019-07-20 22:41发布

这是一个后续行动这个问题( 自定义的UIView如何,与IB / Xcode的4.5.1和iOS模拟器6.0 ),但没有必要读-这是我第一次尝试创建一个自定义的UIView,并有明确的东西,我没有得到这样THX提前任何帮助,您可以提供。

我是从Interface Builder中派生的自定义的UIView。 我想设置的大小设置为200W X 200H和的backgroundColor绿色。 当我创建我做了以下内容:

  1. 通过文件创建一个新的自定义的UIView - >新建 - > Objective-C类称为Tview
  2. >新建 - - >用户界面 - 通过文件创建一个新的视图>查看,并把它称为tnib
  3. 在画布中,我删除了查看,然后从Object Inspector中增加了一个新的查看和设置类名Tview。 此外,在属性检查器中,我设置的大小自由形式和背景颜色为绿色。 在大小检查,我将宽度设置为200,高度为200。

在我Tview.m我设置了如下(我已经根据其他SO问题的一些更新,但目前还不清楚这些是否仍是当前或准确):

@implementation Tview

-(id) initWithCoder:(NSCoder *)aDecoder
{
  NSLog(@"in initWithCoder");
  if((self = [super initWithCoder:aDecoder])) {
    [self setUpView];
    }
  return self;
}

-(void)awakeFromNib
{
  NSLog(@"in awakeFromNib");
  [self setUpView];
}

-(void)setUpView
{
    NSLog(@"I am in setUpView");
    NSArray *subviewArray=[[NSBundle mainBundle] loadNibNamed:@"tnib" owner:self options:nil];
    UIView *mainView = [subviewArray objectAtIndex:0];
    [self addSubview:mainView];
}

@end

在我ViewController.xib,我拖出一个UIView,并设置自定义的类名Tview。 我#IMPORT的Tview.h文件并拖动从ViewController.xib到Tview.h并创建以下特性:

@property (strong, nonatomic) IBOutlet Tview *myTview;

我建立和运行,并得到兴田以下无限循环:

2013-03-04 06:49:05.452 Nibtest2[44524:11303] in initWithCoder
2013-03-04 06:49:05.455 Nibtest2[44524:11303] I am in setUpView
2013-03-04 06:49:05.456 Nibtest2[44524:11303] in initWithCoder
2013-03-04 06:49:05.458 Nibtest2[44524:11303] I am in setUpView
2013-03-04 06:49:05.459 Nibtest2[44524:11303] in initWithCoder
2013-03-04 06:49:05.460 Nibtest2[44524:11303] I am in setUpView

直到它最终崩溃。

我在做什么错在这里?

THX提前

Answer 1:

您的代码设置了一个无限循环: initWithCoder:调用setUpView ,它实例化一个新UIView从捆绑,从而调用initWithCoder:间接,并且完成循环。

你不应该在被读取相同的NIB时调用的代码访问NIB。 你应该阅读的NIB中包含对象的代码,而不是在的代码Tview对象本身。 否则,你会得到一个无限循环。

你需要远程的setUpView完全,从它的通话功能awakeFromNibinitWithCoder: 看来,您在界面生成器从Object Inspector中拖出连接成功,已经引起NIB文件正确加载,通过调用证明initWithCoder: 您可能需要的唯一线路是这样的:

[self addSubview:mainView];

然而,它不应该是在Tview的代码:它需要被移动到具有父控制器myTview财产,应该进行修改,以

[self.view addSubview:_myTview];

该行添加到viewDidLoad 。 而应采取照顾的问题。



Answer 2:

其实我对这个问题的决议是,加载视图在我CustonViewController一个viewDidLoad中,我想用这样的观点:

myAccessoryView = NSBundle.mainBundle().loadNibNamed("MyAccessoryView", owner: self, options: nil)[0] as! MyAccessoryView

不要加载一个视图loadView()方法! 该的loadView方法用于加载您的自定义视图控制器的看法。



文章来源: infinite loop trying to create a Custom View from xib in IB
标签: ios uiview ios6