iOS loadNibNamed confusão, qual é a melhor prática?

Eu estou familiarizado com a maior parte do processo de criação de um XIB para minha própria subclasse UIView, mas nem tudo está funcionando corretamente para mim - é principalmente para fazer com que os IBOutlets se conectem. Eu posso fazê-los trabalhar no que parece ser um caminho indireto.

Minha configuração é esta:

Eu tenho MyClass.h e MyClass.m. Eles têm IBOutlets para um UIView (chamado view) e um UILabel (chamado myLabel). Eu adicionei a propriedade 'view' porque alguns exemplos on-line pareciam sugerir que você precisa disso, e na verdade resolveu um problema em que eu estava sofrendo uma falha porque não conseguia encontrar a propriedade view, nem mesmo na classe pai UIView .Eu tenho um arquivo XIB chamado MyClass.xib, e sua classe personalizada de proprietário do arquivo é MyClass, que pré-preenchida corretamente depois que meu .he M para essa classe existia.

Meu método init é onde estou tendo problemas.

Eu tentei usar o método 'loadNibNamed' do NSBundle mainBundle e definir o proprietário para 'self', esperando que eu criasse uma instância da view e ela automaticamente colocasse seus outlets correspondentes aos da minha classe (eu sei como fazer isso e eu tenho cuidado com isso). Eu então pensei em querer tornar 'self' igual à subvisualização no índice 0 naquela ponta, em vez de fazer

self = [super init];

ou qualquer coisa assim.

Sinto que estou fazendo as coisas erradas aqui, mas os exemplos on-line tiveram coisas semelhantes acontecendo no método init, mas eles atribuíram essa subvisualização 0 à propriedade view e a adicionaram como uma criança - mas isso não é um total de duas instâncias do MyClass? Um essencialmente desvinculado para IBOutlets, contendo o filho MyClass instanciado via loadNibNamed? Ou, na melhor das hipóteses, não é uma instância do MyClass com um UIView extra intermediário contendo todos os IBOutlets que eu queria originalmente como filhos diretos do MyClass? Isso causa um ligeiro aborrecimento quando se trata de fazer coisas como instanceOfMyClass.frame.size.width, já que ele retorna 0, quando o UIView filho que foi introduzido retorna o tamanho de quadro real que eu estava procurando.

É a coisa que estou fazendo errado que estou mexendo com loadNibNamed dentro de um método init? Eu deveria estar fazendo algo mais assim?

MyClass *instance = [[MyClass alloc] init];
[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:instance options:nil];  

Ou assim?

MyClass *instance = [[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:nil options:nil] objectAtIndex:0]; 

Agradecemos antecipadamente por qualquer assistência.

questionAnswers(3)

yourAnswerToTheQuestion