Verschachtelte NSCollectionView mit Bindungen

Ich versuche, die NSCollection-Ansicht ineinander zu verschachteln. Ich habe versucht, ein neues Projekt mit dem zu erstellenApple-Kurzanleitung als Basis.

Zunächst füge ich eine Sammlungsansicht in meine Schreibfeder ein. In die automatisch hinzugefügte Ansicht ziehe ich eine weitere Sammlungsansicht. Die hinzugefügte Untersammlungsansicht erhält einige Bezeichnungen. Hier ist ein Bild von meiner Feder:

Ich gehe dann zurück und baue meine Modelle: Mein Modell der zweiten Ebene .h ist

@interface BPG_PersonModel : NSObject

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

@end

Mein First Level Model .h ist:

@interface BPG_MultiPersonModel : NSObject

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

-(NSMutableArray*)setupMultiPersonArray;

@end

Ich schreibe dann die Implementierung auf, um einige gefälschte Personen innerhalb des Controllers der ersten Ebene (Aufbau des Modells der zweiten Ebene) zu machen: (Bearbeiten) Entfernen Sie den 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;
}

Schließlich führe ich eine ähnliche Implementierung in meinem Appdelegate durch, um das Array mit mehreren Personen zu erstellen

- (void)awakeFromNib {

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

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

(Ich füge hier nicht den gesamten Code ein, lass es mich wissen, wenn es nützlich wäre.)

Ich binde dann alles wie in der Kurzanleitung empfohlen. Ich füge zwei nsarraycontroller mit Attributen hinzu, um jede Ebene des Arraycontrollers an das Controller-Objekt zu binden

Dann binde ich collectionview an den Array-Controller, indem ich an angeordnete Objekte gebundenen Inhalt verwende

Zum Schluss binde ich die Subviews:

mit der Gruppentitelbeschriftung zum dargestellten Objekt.Gruppentitelobjekt in meinem Modell

dann mein Name und Beruf Etiketten zu ihren jeweiligen vertretenen Objekten

Ich habe alle Objekte kvo-konform gemacht, indem ich die erforderlichen Zugriffsmethoden eingeschlossen habe

Ich versuche dann, diese App auszuführen, und der erste Fehler, den ich erhalte, ist:NSCollectionView item prototype must not be nil.

(edit) nachdem ich awakefromnib aus dem ersten Level Modell entfernt habe, bekomme ich dies

Hat es jemand geschafft, nscollection views zu verschachteln? Was mache ich hier falsch? Hier ist das vollständige Projekt, das für andere zum Testen komprimiert wurde:

http://db.tt/WPMFuKsk

Danke für die Hilfe

BEARBEITET:

Endlich habe ich den technischen Support von Apple kontaktiert, um zu sehen, ob sie mir helfen können. Die Antwort von ihnen ist:

Kakaobindungen werden nur so weit gehen, bis Sie zusätzlichen Code benötigen, damit alles funktioniert.

Wenn Sie Arrays in Arrays verwenden, um Ihre Auflistungsansicht zu füllen, werden die Bindungen nicht korrekt in jede replizierte Ansicht übertragen, ohne NSCollectionView als Unterklasse zu definieren und newItemForRepresentedObject zu überschreiben und dieselbe xib selbst zu instanziieren, anstatt die von NSCollectionView bereitgestellte Implementierung der Ansichtsreplikation zu verwenden.

Bei Verwendung des newItemForRepresentedObject-Ansatzes müssen Sie daher Ihre NSCollectionViewItems in separate xibs zerlegen, damit Sie das Subarray von Personen aus der Gruppensammlungsansicht in Ihre innere Sammlungsansicht weitergeben können.

Für Ihre gruppierte Sammlungsansicht sieht Ihre Überschreibung folgendermaßen aus:

- (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; 
} 

Und für Ihre innere Sammlungsunterklasse sieht Ihre Überschreibung folgendermaßen aus:

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

Hier ist ein Beispielprojekt, das sie mir zurückgeschickt haben -

http://db.tt/WPMFuKsk

Ich bin immer noch nicht in der Lage, dies mit meinem eigenen Projekt zum Laufen zu bringen. Kann das zurückgeschickte Projekt weiter vereinfacht werden?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage