NSCollectionView aninhado com ligações

Eu estou tentando aninhar a visão NSCollection dentro de um outro. Eu tentei criar um novo projeto usando oGuia de início rápido da Apple como base.

Começo por inserir uma vista de coleção na minha ponta, para a vista que é automaticamente adicionada Arrastar outra vista de coleção para ela. A exibição de subcoleção adicionada obtém alguns rótulos. Aqui está uma foto do meu bico:

Eu então volto e construo meus modelos: Meu segundo modelo de nível .h é

@interface BPG_PersonModel : NSObject

@property(retain, readwrite) NSString * name;
@property(retain, readwrite) NSString * occupation;

@end

Meu primeiro modelo de nível .h é:

@interface BPG_MultiPersonModel : NSObject

@property(retain, readwrite) NSString * groupName;
@property(retain,readwrite) NSMutableArray *personModelArray;

-(NSMutableArray*)setupMultiPersonArray;

@end

Eu então escrevo a implementação para fazer algumas pessoas falsas dentro do primeiro controlador de nível (construindo o modelo de segundo nível): (edit) remove the awakefromnibcode

/*- (void)awakeFromNib {

    BPG_PersonModel * pm1 = [[BPG_PersonModel alloc] init];
    pm1.name = @"John Appleseed";
    pm1.occupation = @"Doctor";

    //similar code here for pm2,pm3

    NSMutableArray * tempArray = [NSMutableArray arrayWithObjects:pm1, pm2, pm3, nil];
    [self setPersonModelArray:tempArray];

} */


-(NSMutableArray*)setupMultiPersonArray{
    BPG_PersonModel * pm1 = [[BPG_PersonModel alloc] init];
    pm1.name = @"John Appleseed";
    pm1.occupation = @"Doctor";

    //similar code here for pm2,pm3


    NSMutableArray * tempArray = [NSMutableArray arrayWithObjects:pm1, pm2, pm3, nil];
    return tempArray;
}

Finalmente eu faço uma implementação semelhante no meu appdelegate para construir o array multiperson

- (void)awakeFromNib {

    self.multiPersonArray = [[NSMutableArray alloc] initWithCapacity:1];

    BPG_MultiPersonModel * mpm1 = [[BPG_MultiPersonModel alloc] init];
    mpm1.groupName = @"1st list";
    mpm1.personModelArray = [mpm1 setupMultiPersonArray];

(Eu não estou incluindo todo o código aqui, deixe-me saber se seria útil.)

Em seguida, vinculo tudo conforme recomendado pelo guia de início rápido. Eu adicionei dois nsarraycontrollers com atributos adicionados para vincular cada nível de controlador de matriz ao objeto do controlador

Em seguida, vinculo o colecionador ao controlador de matriz usando o conteúdo vinculado aos objetos organizados

Finalmente eu vinculo as subvisualizações:

com o rótulo grouptitle para o objeto representadoobject.grouptitle no meu modelo

então meu nome e etiquetas de ocupação para seus respectivos objetos representados

Eu fiz todos os objetos compatíveis com kvo, incluindo os métodos de acesso necessários

Eu então tento rodar este aplicativo e o primeiro erro que recebo é:NSCollectionView item prototype must not be nil.

(editar) depois de remover o awakefromnib do modelo de primeiro nível eu recebo este

Alguém foi bem sucedido em aninhar vistas nscollection? O que eu estou fazendo errado aqui? Aqui está o projeto completo fechado para que outras pessoas testem:

http://db.tt/WPMFuKsk

Obrigado pela ajuda

EDITADO:

Eu finalmente entrei em contato com o suporte técnico da Apple para ver se eles poderiam me ajudar. A resposta deles é:

As ligações de cacau só vão até certo ponto, até você precisar de algum código extra para fazer tudo funcionar.

Ao usar matrizes dentro de matrizes para preencher sua exibição de coleção, as ligações não serão transferidas corretamente para cada visualização replicada sem criar subclasses de NSCollectionView e anulando newItemForRepresentedObject e instanciando o mesmo xib, em vez de usar a implementação de replicação de visualização fornecida pelo NSCollectionView.

Portanto, ao usar a abordagem newItemForRepresentedObject, é necessário incluir nossos NSCollectionViewItems em xibs separados para que você possa passar o subarray de pessoas da visualização da coleção de grupos para a visualização da coleção interna.

Então, para a sua visão de coleção agrupada, sua substituição se parece com isto:

- (NSCollectionViewItem *)newItemForRepresentedObject:(id)object 
{ 
BPG_MultiPersonModel *model = object; 
MyItemViewController *item = [[MyItemViewController alloc] initWithNibName:@"GroupPrototype" bundle:nil]; 
item.representedObject = object; 
item.personModelArray = [[NSArrayController alloc] initWithContent:model.personModelArray]; 
return item; 
} 

E para sua subclasse de coleção interna, sua substituição é semelhante a esta:

- (NSCollectionViewItem *)newItemForRepresentedObject:(id)object 
{ 
PersonViewController *item = [[PersonViewController alloc] initWithNibName:@"PersonPrototype" bundle:nil]; 
item.representedObject = object; 
return item; 
}

aqui está um projeto de amostra que eles me mandaram de volta -

http://db.tt/WPMFuKsk

Ainda não consigo fazer isso funcionar com meu próprio projeto. O projeto que eles enviaram de volta pode ser simplificado ainda mais?

questionAnswers(1)

yourAnswerToTheQuestion