2013-07-22 2 views
2

У меня есть xib-файл, который является представлением, и я обозначил его как класс FooView.объект, созданный UINib, не отображающий свой класс?

Когда я выделяю его:

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. И если я NSLog класс объекта fooView напрямую, он отображается как класс FooView.

Почему isKindOfClass не правильно идентифицирует этот объект и как я могу это сделать?

ответ

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 

Это гарантирует, что вы получите представление с правильным классом.

0

Невозможно выполнить итерацию по массиву, создаваемому путем создания экземпляра наконечника, когда вы можете подключить объект, который вы хотите к розетке. Вы не говорите, в какой класс входит ваш код, но допустим, что это контроллер вида. Вы можете просто сделать 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 свойство будет связано с правой точки зрения.

+0

Я пытаюсь выполнить единичный тест ... Все, что я хочу сделать, это проверить подпункты представления контейнера и утверждать, что существует правильное количество FooViews, но я не могу, потому что ни один из них не кажется return true, если спросить, являются ли они своего рода классом FooView. Тем не менее, их описание и метод [self class] возвращают «FooView», поэтому я запутался и опубликовал этот вопрос ... – patrick

+1

Поэтому я, по-видимому, могу выполнить то, что я хочу, делая [NSStringFromClass ([fooView class]) isEqualToString: @ "FooView"] ... Это именно то, что должен делать KINDOKCLASS. Я не понимаю. – patrick

Смежные вопросы