ios – 尝试在IB中从xib创建自定义视图的无限循环

ios – 尝试在IB中从xib创建自定义视图的无限循环,第1张

概述这是这个问题的后续行动( custom UIView how-to with IB / Xcode 4.5.1 and iOS Simulator 6.0),但没有必要阅读 – 这是我第一次尝试创建一个自定义的UIView,而且很明显我没有事先得到任何帮助,你可以提供. 我有一个从Interface Builder派生的自定义UIView.我想将设置大小设置为200w x 200h,将backgr 这是这个问题的后续行动( custom UIView how-to with IB / Xcode 4.5.1 and iOS Simulator 6.0),但没有必要阅读 – 这是我第一次尝试创建一个自定义的UIVIEw,而且很明显我没有事先得到任何帮助,你可以提供.

我有一个从Interface Builder派生的自定义UIVIEw.我想将设置大小设置为200w x 200h,将backgroundcolor设置为Green.当我创建时,我做了以下事情:

>通过文件创建一个新的自定义UIVIEw – >新 – > Objective-C类称为TvIEw
>通过文件创建新视图 – >新 – >用户界面 – >查看并称之为tnib
>在Canvas中,我删除了VIEw并从对象检查器添加了一个新视图,并将类名设置为TvIEw.此外,在“属性”检查器中,我将大小设置为“自由形式”,将背景颜色设置为“绿色”.在Size Inspector中,我将宽度设置为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;

我构建并运行并获得以下无限循环的hte:

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

直到它最终崩溃.

我在这做错了什么?

thx提前

解决方法 你的代码设置了一个无限递归:initWithCoder:调用setUpVIEw,它从bundle中实例化一个新的UIVIEw,从而间接调用initWithCoder:并完成循环.

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

您需要完全远程调用setUpVIEw,以及来自awakeFromNib和initWithCoder的调用:.通过从对象检查器拖出来在界面构建器中建立的连接似乎已经导致NIB文件正确加载,这可以通过调用initWithCoder来证明:您可能需要的唯一一条是:

[self addSubvIEw:mainVIEw];

但是,它不应该在TvIEw的代码中:它需要被移动到具有myTvIEw属性的父控制器,并且它应该被修改为

[self.vIEw addSubvIEw:_myTvIEw];

将此行添加到vIEwDIDLoad.它应该解决这个问题.

总结

以上是内存溢出为你收集整理的ios – 尝试在IB中从xib创建自定义视图的无限循环全部内容,希望文章能够帮你解决ios – 尝试在IB中从xib创建自定义视图的无限循环所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1052544.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存