UINib实例化的对象没有显示其正确的类?

时间:2013-07-22 02:58:45

标签: ios objective-c

我有一个xib文件,它是一个视图,我已将其指定为FooView类。

当我分配它时:

UINib *fooViewXib = [UINib nibWithNibName:@"FooView" bundle:[NSBundle mainBundle]];
FooView *fooView = [[fooViewXib instantiateWithOwner:self options:nil] lastObject];
fooView.lolLabel.text = @"lol";

如果我再问:

[fooView isKindOfClass:[FooView class]];

它说没有......

然而,如果我NSlog的fooView对象,它说它是一个fooView。如果我直接对NSoo的fooView对象的类,它显示为FooView类。

为什么isKindOfClass无法正确识别此对象,我该怎么办?

2 个答案:

答案 0 :(得分:0)

而不是使用lastObject,循环遍历数组,直到找到具有正确类的视图。这样做

NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"FooView" owner:self options:nil];
FooView *view;
for (id object in nibViews)
    if ([object isKindOfClass:[FooView class])
        view = object;
// do whatever you want with view

这将确保您获得具有正确类别的视图。

答案 1 :(得分:0)

当您可以将想要的对象连接到插座时,无需迭代通过实例化nib创建的数组。你没有说你的代码属于哪个类,但我们假设它是一个视图控制器。您只需在视图控制器中设置fooView个插座即可:

@interface MyViewController : UIViewController
...
@property (strong, nonatomic) IBOutlet FooView* fooView;
@end

将笔尖中文件所有者的类型设置为MyViewController,并将foo视图连接到文件所有者的fooView出口。现在,在您的视图控制器中,您可以将self作为笔尖的所有者传递:

UINib *fooViewXib = [UINib nibWithNibName:@"FooView" bundle:[NSBundle mainBundle]];
[fooViewXib instantiateWithOwner:self options:nil];

之后,fooView属性将连接到右视图。