我有一个从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创建自定义视图的无限循环所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)