iPhone - 从nib文件加载UIView?
问题描述:
我是继承UIView试图加载视图,我从界面生成器从nib文件中删除。 我上回线以下错误:iPhone - 从nib文件加载UIView?
终止应用程序由于未捕获的异常“NSGenericException”,理由是:“这个编码器需要更换的对象从的initWithCoder返回:”
- (id)initWithCoder:(NSCoder *)aDecoder
{
[super initWithCoder:aDecoder];
NSArray *objects = [[NSBundle mainBundle]
loadNibNamed:@"MyView"
owner:nil
options:nil];
if (self = [objects objectAtIndex:0])
{
}
return [self retain];
}
答
你正在做的事情很奇怪)
loadNibNamed:owner:options:
将调用initWithCoder:
实例你从xib的视角。但是您从initWithCoder:
打电话给loadNibNamed:owner:options:
。无限递归?
要加载视图从XIB可以执行下一个:
@implementation MyView
+ (MyView*) myView
{
NSArray* array = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:nil options:nil];
return [array objectAtIndex:0]; // assume that MyView is the only object in the xib
}
@end
答
相反不是做self = [objects objectAtIndex:0]
你应该遍历数组,并确保您得到合适的对象,例如:
for (id object in objects) {
if ([object isKindOfClass:[YourClassName class]])
self = (YourClassName*)object;
}
这么说,我已经送花儿给人s完成了这一层,并从UIViewController
中取出参考。这打破了抽象层,虽然,因为这只是想使用的视图类需要知道什么笔尖其:
UIViewController *vc = [[UIViewController alloc] initWithNibName:@"MyView" bundle:nil];
YourClassName* view = (YourClassName*)vc.view;
[vc release];
除了将自定义类设置为“MyView”之外,为了在另一个笔尖使用“MyView”还有什么特别之处吗? – qix 2014-01-02 10:47:02